spring框架在使用过程中,需要对它进行一系列的配置才可以使用,在spring发展过程中,配置方式也发生了一些变化:
2.5版本前====>xml
2.5版本后====>annonation+xml
3.0版本后====>annonation+javaConfig配置类
目录
2.5版本前:xml
2.5版本后:annonation+xml
1.注入类:用来注入对象
2.注入数据
3.其他注解
3.0版本后:annonation+javaConfig配置类
2.5版本前:xml
2.5版本以前,配置spring框架使用的是纯xml的方法,将每个对象都使用<Bean></Bean>注入进框架中,使用方法大概如下:
使用xml方式注入类有三种方式:
构造注入:使用构造方法注入bean;
<bean id="" class="" init-method="" destroy-method="" scope="" autowire="">
<constructor-arg></constructor-arg></bean>
Setter注入:使用Setter方法注入bean;
<bean id="" class="" init-method="" destroy-method="" scope="" autowire="">
<property></property></bean>
属性注入:使用成员属性注入bean,不推荐。原因:使用私有的成员属性变量,依靠反射实现,破坏封装,只能依靠IOC容器实现注入,不严谨;
2.5版本后:annonation+xml
2.5版本以后,为了弥补xml配置方式的缺点:过于复杂,就有了注解和xml一起使用来配置spring的方式;常用的spring注解大致分为以下几类:
1.注入类:用来注入对象
@Component
含义:将注解所修饰的类(任意类)注入spring容器
位置:类
语法:@Component(value = "id")
如果省略value="id"默认注入的id为类的名称且首字母小写
注意:不可以单独使用
<context:component-scan base-package=""></context:component-scan>
@Repository 注入数据访问层
@Service 注入业务层
@Controller 注入控制层
以上三个注解与@Component功能语法一致
2.注入数据
@Value()
含义:向属性注入基本类型与String
语法:@Value("数据")
@Value("${key}")
位置:属性
注意:不能单独使用,需要搭配
<context:property-placeholder location=""></context:property-placeholder>
@Autowired()
替换:自动装配属性
位置:属性
含义:通过“set”方法【set方法可以省略】,按照“类型”自动装配,如果类型冲突则按照"名称"装配
注意:
1.按类型装配如果冲突切换为名称装配
2.按类型装配如果冲突切换为名称装配,如果名称也没有则会抛异常
NoUniqueBeanDefinitionException
3.按类型装配没一个匹配
NoSuchBeanDefinitionException
3.其他注解
@Primary
含义:在类型装配冲突的情况下,此注解所修饰的类作为首选项
位置:类
注意:不能单独用
@Qualifier
含义:按照名称装配
位置:属性
注意:不能单独用
@Resource
含义:按照名称装配
位置:属性
注意:单独用
@Scope
含义:作用域
属性值:
singleton :Spring只会为该bean对象只会创建唯一实例,Spring 中的 bean 默认都是单例;
prototype :每次获取bean,Spring会创建一个新的 bean实例;
request:每一次 HTTP 请求,Spring会创建一个新的 bean实例;
session :不同的HTTP会话,Spring会创建不同的 bean实例;
位置:类
注意:不能单独用
举例:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreDestroy
含义:替换destory-method
位置:方法
注意:单独用
@PostConstruct
含义:替换init-method
位置:方法
注意:单独用
3.0版本后:annonation+javaConfig配置类
spring在3.0版本以后,为了更加优化配置方式,就有了注解加配置类的方式来配置spring框架,因此就有了一些新的注解来完成配置;
@Configuration
含义:配置类
注意:调用时要使用AnnotationConfigApplicationContext(applicationConfig.class)
@ComponentScan
替换:<context:component-scan base-package=""></context:component-scan>
@PropertySource()
替换:<context:property-placeholder location=""></context:property-placeholder>
@Import()
含义:导入其他配置类
@Bean
含义:注入类;方法返回值为class 方法名称为id
位置:修饰方法
注意:单独使用无需扫描