一、用于创建对象的注解
1. 作用:和XML配置文件中编写一个<bean>标签实现的功能相同
2. 注解
@Component :
作用:用于把当前对象存入 Spring 容器中
属性:value :用于指定 bean 的 id ,若不写时,默认是当前的类名-首字母改小写
- 以下三个注解作用和属性与Component一模一样
@Controller :
一般用于表现层
@Service :
一般用于业务层
@Repository :
一般用于持久层
例子:
1.配置bean.xml
2. 在类上加上注解
3.通过注解使用此类
二、用于注入数据的注解
1. 作用:和XML中的bean标签写一个<property>标签的作用相同
2. 注解(以下前三个注解都只能注入bean 类型的数据,基本类型和String 类型无法使用。集合类型的注入只能通过 XML 实现)
@Autowired :
作用:自动按照类注入。只要容器中有唯一的一个 bean 对象类型和要注入的变量类型匹配(即例子的 IAccountDao),就可以注入成功
若有两个 bean 对象匹配,则会根据注解下创建的 对象 去匹配(即例子的accountDao),对象匹配不对就会报错
若一个 bean 都没有匹配到,报错
出现位置:可以写在变量上,可以写在方法上
注意:在使用此注解注入时,set 方法就不是必须的了
@Qualifier :
作用:在按照类中注入的基础上,再按照名称注入。
属性:value :用于指定注入 bean 的 id
注意:必须和 @AutoWired 配合使用
@Resource :
作用:直接按照 bean 的 id 注入,它可以独立使用
属性:name :用于指定 bean 的 id
@Value :
作用:用于注入基本类型和 String 类型的数据
属性:value :用于指定数据的值。
注意:它可以使用 Spring 中的 SpEl(也就是Spring的 el 表达式即:${ 表达式 })
例子:
现在容器里有的对象:
又来一个DAO实现类
1. 注解标后,先按照IAccountDao 这个类型去容器里找是否有这个对象
2. 在容器里找到了(跳过 key 直接找value)
三、用于改变作用范围的注解
1. 作用:和在bean标签中使用scope属性实现的功能相同
2. 注解
@Scope :
作用:用于指定 bean 的作用范围
属性:value:指定范围的取值,常用取值:singleton(单例对象,每次创建新对象) / prototype
例子:
四、生命周期相关的注解
1. 作用:和在bean标签中使用 init-method 和 destroy-method 的作用相同
2. 注解
@PreDestroy
作用:用于指定销毁方法
@PostConstruct
作用:用于指定初始化方法
例子:
五、新注解
@Configuration
作用:指定当前类是一个配置类,作用和 bean.xml 一样
注意:当配置类作为 AnnotationConfigApplicationContext 对象创建的参数时,该注解可省略不写
@ComponentScan
作用:通过注解指定 Spring 再创建容器时要扫描的包
属性:value / basePackages :指定创建容器时要扫描的包名。这两个属性作用一样。数组类型
使用此注解等同于在XML里配置了<context : component-scan base-package="XXX.XXX"></context : component-scan>
@Bean
作用:用于把当前方法的返回值作为 bean 对象存入 Spring 的 IOC 容器中
属性:name:用于指定 bean 的 id,当不写时默认值是当前方法的名称
注意:若方法有参数,Spring 框架会去容器中查找有没有可用的 bean对象,查找方法和 AutoWired 相同
例子:
以上:加上@Bean 注解后,就相当于在配置里加上了<bean>标签
测试是否单例的例子:
配置如下:配置Scope(prototype)后是单例了
对比component和controller:https://www.cnblogs.com/javaboy2018/p/9039501.html