天天看點

Spring-IOC容器-Bean管理-基于注解方式詳解Spring-IOC容器-Bean管理-基于注解方式

Spring-IOC容器-Bean管理-基于注解方式

  1. 什麼是注解?

    (1)注解是代碼特殊标記,格式:

    @注解名稱(屬性名稱=屬性值, 屬性名稱=屬性值…)

    (2)使用注解,注解作用在類上面,方法上面,屬性上面

    (3)使用注解目的:簡化 xml 配置

  2. Spring 針對 Bean 管理中建立對象提供注解

    下面四個注解功能是一樣的,都可以用來建立 bean 執行個體

    (1)@Component

    (2)@Service

    (3)@Controller

    (4)@Repository

  3. 基于注解方式實作對象建立

    ①引入依賴(引入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.......");
         }
    }
               
  4. 開啟元件掃描細節配置
    <!--示例 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>
    
               
  5. 基于注解方式實作屬性注入

    ① @Autowired:根據屬性類型進行自動裝配

    (1)第一步 把 service 和 dao 對象建立,在 service 和 dao 類添加建立對象注解。

    (2)第二步 在 service 注入 dao 對象,在 service 類添加 dao 類型屬性,在屬性上面使用注解。

    @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.....");
        }
    }
               
    ② @Qualifier:根據名稱進行注入,這個@Qualifier 注解的使用,和上面@Autowired 一起使用
    //定義 dao 類型屬性
    //不需要添加 set 方法
    //添加注入屬性注解
    @Autowired //根據類型進行注入
    //根據名稱進行注入(目的在于差別同一接口下有多個實作類,根據類型就無法選擇,進而出錯!)
    @Qualifier(value = "userDaoImpl1") 
    private UserDao userDao;
               
    ③ @Resource:可以根據類型注入,也可以根據名稱注入(它屬于javax包下的注解,不推薦使用!)
    //@Resource //根據類型進行注入
    @Resource(name = "userDaoImpl1") //根據名稱進行注入
    private UserDao userDao;
               
    ④ @Value:注入普通類型屬性
    @Value(value = "abc")
    private String name
               
  6. 完全注解開發

    (1)建立配置類,替代 xml 配置檔案

    @Configuration //作為配置類,替代 xml 配置檔案
    @ComponentScan(basePackages = {"com.atguigu"})
    public class SpringConfig {
        
    }
               
    (2)編寫測試類
    @Test
    public void testService2() {
     //加載配置類
     ApplicationContext context
     = new AnnotationConfigApplicationContext(SpringConfig.class);
     UserService userService = context.getBean("userService",
    UserService.class);
     System.out.println(userService);
     userService.add();
    }
               

最後喜歡的小夥伴别忘了一鍵三連哦🎈🎈🎈

Spring-IOC容器-Bean管理-基于注解方式詳解Spring-IOC容器-Bean管理-基于注解方式