对象的定义
@Component:标注这个类是一个组件,该类由IOC容器创建对象并管理- @Component("accountDao")=
<bean id="accountDao" class="com.itheima.review.dao.impl.AccountDaoImpl"> - bean的id默认是类名周字母小写,可以通过value属性值修改:@Component(value = "accountDao") 可以简写成 @Component("accountDao")
- @Component("accountDao")=
三层上的注解
@Controller、@Service、@Repository:是@Component的特殊化,用于更特定的位置(分别用在表示层、业务层、持久层)。
@Repository、@Service、@Controller
以上三个注解标注的类更适合由工具处理或与切面关联(事务处理)。还可以在Spring框架的未来版本中携带额外的语义。
@Component:除了表示层、业务层、持久层外,如果该类对象需要由sping容器管理,使用该注解
对象的存活范围
@Scope
标注在类上,用于指定bean的作用范围,相当于配置文件中的scope属性
对象生命周期
@PostConstruct
标注在方法上,该方法会在bean对象创建之后执行,等同于xml中的 init-method
@PreDestroy
标注在方法,该方法会在bean对象销毁之前执行,等同于xml中的 destroy-method
依赖注入 - 引用类型
@Autowired
@Autowired表示依赖注入,可用标注在方法上(实例方法和构造方法),也可以标注在属性上
当@Autowired标注在属性上的时候,属性对应的set方法可以省略不写
@Autowired 注入流程
- 该注解会从IOC容器中先按类型查找bean对象,如果没有该类型的bean,就会报错
- 如果有该类型的bean且只有一个,则注入值
- 如果该类型的bean > 1 个,则按照属性名称(字段属性名/方法形参名)进行匹配注入,如果属性名匹配不上则报错
@Qualifier
要跟@Autowired联合使用,代表==在按照类型匹配的基础上==,==再按照名称匹配==,两个条件必须同时满足
依赖注入 - 简单类型
@Value
用于简单数据类型的注入,相当于< property name="" value="" >
纯注解
@ComponentScan():注解扫描,写主配置类名上
配置文件提取
@Configuration 标注当前类就是配置类,配置类中的@Bean也会加入IOC容器 @PropertySource("jdbc.properties") 读取配置文件:指定配置文件的位置
Spring整合单元测试
@RunWith(SpringJUnit4ClassRunner.class) 让测试在Spring容器环境下执行
@ContextConfiguration(classes = {SpringConfig.class} ) 通过配置类创建IOC容器
@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) 通过XML配置文件创建IOC容器