Spring-IOC容器-Bean管理-基于注解方式
-
什麼是注解?
(1)注解是代碼特殊标記,格式:
@注解名稱(屬性名稱=屬性值, 屬性名稱=屬性值…)
(2)使用注解,注解作用在類上面,方法上面,屬性上面
(3)使用注解目的:簡化 xml 配置
-
Spring 針對 Bean 管理中建立對象提供注解
下面四個注解功能是一樣的,都可以用來建立 bean 執行個體
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository
-
基于注解方式實作對象建立
①引入依賴(引入spring-aop jar包)
②開啟元件掃描
③建立類,在類上面添加建立對象注解<!--開啟元件掃描 1 如果掃描多個包,多個包使用逗号隔開 2 掃描包上層目錄 --> <context:component-scan base-package="com.atguigu"></context:component-scan>
//在注解裡面 value 屬性值可以省略不寫, //預設值是類名稱,首字母小寫 //UserService -- userService @Component(value = "userService") //注解等同于XML配置檔案:<bean id="userService" class=".."/> public class UserService { public void add() { System.out.println("service add......."); } }
- 開啟元件掃描細節配置
<!--示例 1 use-default-filters="false" 表示現在不使用預設 filter,自己配置 filter context:include-filter ,設定掃描哪些内容 --> <context:component-scan base-package="com.atguigu" use-defaultfilters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/><!--代表隻掃描Controller注解的類--> </context:component-scan> <!--示例 2 下面配置掃描包所有内容 context:exclude-filter: 設定哪些内容不進行掃描 --> <context:component-scan base-package="com.atguigu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/><!--表示Controller注解的類之外一切都進行掃描--> </context:component-scan>
-
基于注解方式實作屬性注入
① @Autowired:根據屬性類型進行自動裝配
(1)第一步 把 service 和 dao 對象建立,在 service 和 dao 類添加建立對象注解。
(2)第二步 在 service 注入 dao 對象,在 service 類添加 dao 類型屬性,在屬性上面使用注解。
② @Qualifier:根據名稱進行注入,這個@Qualifier 注解的使用,和上面@Autowired 一起使用@Service public class UserService { //定義 dao 類型屬性 //不需要添加 set 方法 //添加注入屬性注解 @Autowired private UserDao userDao; public void add() { System.out.println("service add......."); userDao.add(); } } //Dao實作類 @Repository //@Repository(value = "userDaoImpl1") public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("dao add....."); } }
③ @Resource:可以根據類型注入,也可以根據名稱注入(它屬于javax包下的注解,不推薦使用!)//定義 dao 類型屬性 //不需要添加 set 方法 //添加注入屬性注解 @Autowired //根據類型進行注入 //根據名稱進行注入(目的在于差別同一接口下有多個實作類,根據類型就無法選擇,進而出錯!) @Qualifier(value = "userDaoImpl1") private UserDao userDao;
④ @Value:注入普通類型屬性//@Resource //根據類型進行注入 @Resource(name = "userDaoImpl1") //根據名稱進行注入 private UserDao userDao;
@Value(value = "abc") private String name
-
完全注解開發
(1)建立配置類,替代 xml 配置檔案
(2)編寫測試類@Configuration //作為配置類,替代 xml 配置檔案 @ComponentScan(basePackages = {"com.atguigu"}) public class SpringConfig { }
@Test public void testService2() { //加載配置類 ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); UserService userService = context.getBean("userService", UserService.class); System.out.println(userService); userService.add(); }
最後喜歡的小夥伴别忘了一鍵三連哦🎈🎈🎈
