天天看點

spring IOC容器 Bean 管理——基于注解方式

IOC 操作 Bean 管理(基于注解方式)

1、什麼是注解

(1)注解是代碼特殊标記,格式:@注解名稱(屬性名稱=屬性值, 屬性名稱=屬性值…)

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

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

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

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

(1)@Component

(2)@Service

(3)@Controller

(4)@Repository

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

第一步 引入依賴 (引入spring-aop jar包)

第二步 開啟元件掃描

第三步 建立類,在類上面添加建立對象注解

//在注解裡面 value 屬性值可以省略不寫,
//預設值是類名稱,首字母小寫
//UserService -- userService
@Component(value = "userService") //注解等同于XML配置檔案:
public class UserService {
 public void add() {
 System.out.println("service add.......");
 }
}
      

4、開啟元件掃描細節配置

expression="org.springframework.stereotype.Controller"/>



 
expression="org.springframework.stereotype.Controller"/>

      

5、基于注解方式實作屬性注入

(1)@Autowired:根據屬性類型進行自動裝配

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

第二步 在 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.....");
    }
}
      

(2)@Qualifier:根據名稱進行注入,這個@Qualifier 注解的使用,和上面@Autowired 一起使用

//定義 dao 類型屬性
//不需要添加 set 方法
//添加注入屬性注解
@Autowired //根據類型進行注入
//根據名稱進行注入(目的在于差別同一接口下有多個實作類,根據類型就無法選擇,進而出錯!)
@Qualifier(value = "userDaoImpl1") 
private UserDao userDao;
      

(3)@Resource:可以根據類型注入,也可以根據名稱注入(它屬于javax包下的注解,不推薦使用!)

//@Resource //根據類型進行注入
@Resource(name = "userDaoImpl1") //根據名稱進行注入
private UserDao userDao;
      

(4)@Value:注入普通類型屬性

@Value(value = "abc")
private String name
      

6、完全注解開發

@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();
}