常用IOC注解的分类
用于创建对象的 : 作用和XML配置文件中编写标签实现的功能一致
-
@Component
作用 : 将当前对象存入soring容器中
属性 :
value : 指定标签的id , 不设置则默认是本类类名,首字母小写. -
@Controller : 一般使用在表现层
-
@Service : 一般使用在业务层
-
@Repository : 一般是用在持久层
以上三个注解他们的作用和属性与Component一致,
这是spring框架为我们提供的三层使用的注解,使我们的三层对象更加清晰.
用于注入数据的 : 与标签中的标签的作用一致 -
@Autowired
作用 : 自动按照类型注入.
1) 在ioc容器中找到唯一一个匹配的类型,直接注入
2) 在ioc容器中没有找到匹配的类型,报错
3) 在ioc容器中找到了多个匹配的类型,则匹配变量名称和bean对象id,匹配不上则报错.匹配到则注入
出现位置 ; 可以是变量上,也可以是方法上
细节 : 在使用注解注入时,无需set方法. -
@Qualifier
作用 : 在按照类中注入的基础之上再按照指定id注入
属性:
value : 用于指定注入bean的id. -
@Resource
作用 : 直接按照bean对象的id注入.
属性 :
name : 指定注入的bean对象id -
@Value
作用 : 用于注入String和基础数据类型.
用于改变作用范围的 : 与标签中的scope属性实现的功能一致
-
@Scope
作用 : 在类上添加的,控制类生成的时候采用单例还是多例。
属性:
singleton :单例
prototype :多例
request :request域,需要在web环境
session :session域,需要在web环境
application: context域,需要在web环境
globalsession 集群环境的session域,需要在web环境
生命周期相关 : 与标签中的init-method和destroy-method属性实现的功能一致
-
@PostConstructor
作用 : 与标签中的init-method属性一致.
-
@PreDestroy
作用 : 与标签中的destroy-method属性一致
编写一个配置类时注解的使用
-
@Configuration
作用: 指定当前类是一个配置类
细节: 当配置类作为AnnonationConfigApplicationContext的参数时,可以不写该注解. -
@ComponentScan
作用: 用于通过注释指定spring在创建容器时要扫描的包
属性:
value: 用于指定创建容器时要扫描的包.
basePackage: 和value一样 -
@Bean
作用: 用于当前方法的返回值作为bean对象存入spring的ioc容器中
属性:
name: 用于指定bean对象的id. 默认值是当前方法的名称.
细节: 当我们使用注释配置方法时,如果方法有参数,会去ioc容器中去寻找有没有类型相同的对象
–没有, 报错
–有多个, 匹配参数名称和bean对象ID -
@import
作用: 用于导入其它的配置类
属性:
value: 用于指定其她配置类的字节码 -
@Qualifier
作用: 注入方法的参数时指定的参数bean对象id -
@import
作用:用于导入另外的配置类的字节码
例子如下:
@Configuration
@ComponentScan("lorihen")
@Import(JdbcConfig.class)
public class SpringConfiguration {
/**
* 用于创建一个QueryRunner对象
*
* @param dataSource
* @return
*/
@Bean(name = "runner")
@Scope(value = "prototype")
public QueryRunner createQueryRunner(@Qualifier("dataSource")DataSource dataSource) {
return new QueryRunner(dataSource);
}
@Bean(value = "dataSource")
public DataSource createDataSource() {
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mybatis");
ds.setUser("root");
ds.setPassword("123");
return ds;
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return null;
}
}