一、SpringIOC理解
关键字:IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系
IOC( Inversion of Control,中文释义:控制反转 ) 是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;
- 控制 :指的是对象创建(实例化、管理)的权力
- 反转 :控制权交给外部环境(Spring框架、IoC容器)
二、xml核心配置文件
2.5版本前====>xml
SpringDI(依赖注入)
DI(Dependecy Inject,中文释义:依赖注入) 是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。(例如在MyBatis整合Spring时,SqlSessionFactoryBean 依赖IOC容器注入一个 DataSource数据源bean);
DI实现方式:
- set注入=通过set方法维护对象之间的依赖关系
- 构造注入=通过构造方法维护对象之间的依赖关系
- 属性注入(不推荐)
DI注入的数据类型:
- 注入对象
- 注入基本类型与String
- 复杂类型list arry set map properties
set注入DI实现步骤:
1. 思考
2. 给属性提供set方法
3. 在bean标签内部开启配置
配置位置:<bean>此位置</bean>
配置语法:<property 属性名="属性值"></property>
配置属性:
name======》属性名称
value=====》属性值
ref=======》属性值的引用
三、xml+注解
2.5版本后====>annonation+xml
替换:
<bean id="" class="" init-method="" destroy-method="" scope="" autowire="">
<property></property>
<constructor-arg></constructor-arg>
</bean>
一、注入类
@Component
含义:将注解所修饰的类注入spring容器
位置:类
语法:@Component(value = "id")
如果省略value="id"默认注入的id为类的名称且首字母小写
注意: 不可以单独使用<context:component-scan base-package=""></context:component-scan>
@Repository 注入数据访问层
@Service 注入业务层
@Controller 注入控制层
以上三个注解与@Component功能语法一致
二.注入数据
@Value()
含义:向属性注入基本类型与String
语法:@Value("数据")
@Value("${key}")
位置:属性
注意:不能单独使用
<context:property-placeholder location=""></context:property-placeholder>
@Autowired()
替换:自动装配属性
位置:属性
含义:通过“set”方法【set方法可以省略】,按照“类型”自动装配,如果类型冲突则按照"名称"装配
注意:
1.按类型装配如果冲突切换为名称装配
2.按类型装配如果冲突切换为名称装配,如果名称也没有则会抛异常
NoUniqueBeanDefinitionException
3.按类型装配没一个匹配
NoSuchBeanDefinitionException
四、纯注解
3.0版本后====>annonation+javaConfig配置类
@Configuration
含义:配置类
注意:AnnotationConfigApplicationContext
@ComponentScan
替换:<context:component-scan base-package=""></context:component-scan>
@PropertySource()
替换:<context:property-placeholder location=""></context:property-placeholder>
@Import()
含义:导入其他配置类
@Bean
含义:注入类;方法返回值为class 方法名称为id
位置:修饰方法
注意:单独使用无需扫描
五、其他注解
@Primary
含义:在类型装配冲突的情况下,此注解所修饰的类作为首选项
位置:类
注意:不能单独用
@Qualifier
含义:按照名称装配
位置:属性
注意:不能单独用
@Resource
含义:按照名称装配
位置:属性
注意:单独用
@Scope
含义:作用域
位置:类
注意:不能单独用
举例:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@PreDestroy
含义:替换destory-method
位置:方法
注意:单独用
@PostConstruct
含义:替换init-method
位置:方法
注意:单独用