🚩 说在前面
- 学习基于注解的 IoC 配置,大家脑海里首先得有一个认知,即注解配置和 xml 配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。
- 关于实际的开发中到底使用xml 还是注解,每家公司有着不同的使用习惯。所以这两种配置方式我们都需要掌握。
🚩 IOC注解使用
📌 第一步:spring配置文件中,配置context:component-scan标签
📌 第二步:类上面加上注解@Component,或者它的衍生注解@Controller、@Service、@Repository
🚩 IoC注解(创建对象)
📌 @Component注解
- 作用:
把资源让 spring 来管理。相当于在 xml 中配置一个 bean。- 属性:
value:指定 bean 的 id。
📌 @Controller、@Service、@Repository注解
- 他们三个注解都是针对@Component的衍生注解
- 他们的作用及属性都是一模一样的。他们只不过是提供了更加明确的语义化。
一般用于表现层的注解。
一般用于业务层的注解。
一般用于持久层的注解。- 细节:如果注解中有且只有一个属性要赋值时,且名称是 value,value 在赋值是可以不写。
🚩 DI注解(依赖注入)
📌 @Autowired
- 默认按类型装配(byType)
- 这个;注解是spring自身的
- 默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
- 如果我们想使用名称装配可以结合@Qualifier注解进行使用
📌 @Qualifier
- 在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。
- 它在给字段注入时不能独立使用,必须和@Autowire 一起使用;但是给方法参数注入时,可以独立使用。
📌 @Resource
- 默认按照名称(byName)进行装配,名称可以通过name属性进行指定
- 这个注解属于J2EE的
- 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,当找不到与名称匹配的bean时才按照类型进行装配。
- 但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
📌 @Value
- 给基本类型和String类型注入值
- 可以使用占位符获取属性文件中的值。
@Value(“${name}”)//name是properties文件中的key private String name;
🚩 改变作用范围
📌 @Scope
- 作用:
指定 bean 的作用范围。- 属性:
value:指定范围的值。
取值:singleton prototype request session globalsession
🚩 和生命周期相关
@PostConstruct和@PreDestroy
🚩 关于注解和XML的选择问题
- 注解的优势:
配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。- XML 的优势:
修改时,不用改源码。不涉及重新编译和部署。Spring 管理 Bean 方式的比较: