理念:使现有的技术更加容易使用
优点:
- 开源免费的框架(容器)
- 轻量级,非入侵式
- 控制反转(IOC),面向切面(AOP)
- 支持事务处理,对框架整合支持
ApplicationContext 获取spring的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
bean配置
name 别名
import 导入其他的配置文件
依赖注入
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性,由容器来注入
- 构造器注入
- set注入
- 拓展方式注入(p命名空间、c命名空间,需要导入约束)
scope 作用域
- 单例模式 singleton:每次获取都是同一个对象,spring默认
- 原型模式 prototype:每次get的时候都是新对象
- request、session、application。。。只能在web开发中使用
bean自动装配 Autowired
3种方式
- 在xml中显示的配置
- 在java中显示配置
- 隐式的自动装配
byName:自动查找和set后面对应的bean
byType:自动查找与对象属性相同的bean
使用注解
- 导入约束 context约束
- 配置注解支持 <context:annotation-config/>
@Autowired(先按类型再按)
在setter和属性上使用,可以忽略setter方法
@Autowired(required=false) 属性可为空
@Qualifier(value="beanName") 指定某个bean
@Resource注解
@Resource功能更强大
@Resource也可以实现自动装备
@Resource(name="")
@Autowired和@Resource区别
- 都是自动装配,都可以放在属性字段上
- @Autowired通过byType的方式实现,再通过byName
- @Resource默认通过byname的方式实现,如果找不到名字,则用byType实现
如何使用
- 使用注解,需要AOP的包,context约束
<context:component-scan base-package="com.*" 指定要扫描的包,这个包下的注解就会生效
<context:annotation-config/> 注解驱动
@Component : 组件,放在类名上,等价于<bean id="xxx" class="com.xxx.xxx"/>,说明该类被管理了
以下三个注解和@Component的功能是一样的
- @Repository 在dao层使用
- @Service 在service层使用
- @Controller 在controller层使用
@Value :在setter和成员变量上,对基础类型赋值
@Scope :作用域
xml与注解
- xml适用于各种场合
- 注解不是自己的类无法适用,维护相对复杂
xml用来管理bean;
注解只负责完成属性的注入
@Configuration 代表是一个配置类,等价于bean.xml
@ComponentScan("***") 扫描包
@Bean 等价于 <bean id="" class=""/>
ApplicationContext context = new AnnotationConfigApplicationContext(XXXConfig.class)
AOP
代理模式