Spring——Second
DI依赖注入
作用:将springIOC容器所创建的各个组件,使用DI的语法进行关联,耦合
DI数据类型
- 基本类型与String
- JavaBean
- 复杂类型(List set array map properties)【构造注入不支持】
DI实现方式
- set注入
- 构造注入
- 注解注入
SpringIOC容器对Bean管理
Bean实例化
- 通过构造方法(默认)
- 通过工厂方法
- 通过静态工厂方法
Bean作用域
spring对于创建JavaBean实例的方式
语法:<bean scope="属性值"></bean>
属性值:singleton——单例(默认);prototype——多例;
reques——一个请求创建一个;session——一个会话创建一个
Bean生命周期
- 实例化
- 属性赋值(DI)
- 初始化
- 操作使用
- 销毁
Spring的配置
spring2.5前:xml
spring2.5后:xml+annotation注解
spring3.0后:annotation注解+JavaConfig配置类
注解
注入类
语法:@Component(value="注入容器中的id")
注意:
- 【作用于类;如果省略id,默认是类名且首字母小写;value属性名称可以省略】
- 结合标签一起使用【<context:component-scan base-package=""/>功能:扫描所有被@Component注解所修饰的类,注入容器】
- @Repository——注入数据访问层;@Service——注入业务层;@Controller——注入控制层【其功能语法与@Component一致】
注入基本数据
@Value
含义:注入基本数据
修饰:成员变量或对应的set方法
语法:@Value("数据内容");@Value("${动态获取}")【配合加载资源文件标签使用<context:property-placeholder location="classpath:jdbc.properties"/>】
@Autowired——注入JavaBean对象
含义:按照通过set方法进行“类型装配”,set方法可省略
语法:@Autowired(required = "true-默认、false、是否必须进行装配")
修饰:成员变量或对应的构造方法
注意:
- 默认是按照类型装配且同set方法
- 若容器中有一个类型可以与之匹配则装配成功,若没有一个类型可以匹配则报错(NoSuchBeanDefinitionException)
- 若容器中有多个类型可以与之匹配,则自动切换为按名称装配,若名称没有对应,则报错(NoUniqueBeanDefinitionException)
其他注解
@Primary:当类型冲突时,此注解修饰的类被列为首选;要配合注入类的注解一起使用
@Qualifier(value="名称"):按名称装配;必须与@Autowired联合使用
@Resource(name="名称"):按名称装配;单独使用
@Scope:配置类的作用域;必须和注入类的注解联合使用
- @Scope("prototype")
- @Scope("singleton")
- @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
- @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@PostConstruct:初始化、修饰方法【替换init-method】
@PreDestroy:销毁、修饰方法【替换destory-method】
配置类
@Configuration
作用:指定当前类为一个配置类(当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。)
@ComponentScan
作用:通过注解指定spring在创建容器时要扫描的包
属性:value和basePackages作用一样,用于指定创建容器时要扫描的包
@PropertySource
作用:用于指定properties文件位置
属性:value指定文件名称和路径
@Bean
作用:用于把当前方法的返回值作为bean对象存入spring容器中
属性:name用于指定bean的id,不写时,默认值是当前方法的名称
@Import
作用:用于导入其他的配置类
属性:value用于指定配置类的字节码
本节相关案例已压缩上传至资源文件中,可点主页-资源查看