Spring框架入手
简介
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。专门有一个容器来装对象,每次调用的时候就不需要再new,只需要从容器中拿就行。
spring的优点:
- Spring就是一个大工厂,专门负责生成Bean,可以将所有对象创建和依赖关系维护由Spring管理(IOC)
- Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能(AOP)
- 只需要通过配置就可以完成对事务的管理,而无需手动编程
- 对JavaEE开发中一些难用的API(JDBC、JavaMail、远程调webservice用等),都提供了封装,使这些API应用难度大大降低
快速入门
- 下载Spring 开发包
- 导入Spring的jar包
- 配置Spring的核心xml文件
- 在程序中读取Spring的配置文件来获取Bean【Bean其实就是一个new好的对象】
Spring IoC控制反转创建实例
1>写了个配置文件beans.xml
2.从beans.xml获取bean
如果创建多次对象会发现,指向同一个内存对象
总结:IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架
Dependency Injection 依赖注入
在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件。
加载Spring容器的三种方式
类路径获得配置文件(主动加载)
文件系统路径获得配置文件
使用BeanFactory(了解)(延时加载)
spring内部创建对象的原理:
1.解析xml文件,获取类名,id,属性
2.通过反射,用类型创建对象
3.给创建的对象赋值
实例化Bean的三种方式
1.使用构造方法实例化
2.使用静态工厂方法实例化
3.使用实例工厂方法实例化
bean的作用域
singleton:在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值
prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时 ,相当于执行new XxxBean()
bean的生命周期
1.instantiate bean对象实例化
2.populate properties 封装属性
3.如果Bean实现BeanNameAware 执行 setBeanName
4.如果Bean实现BeanFactoryAware 执行setBeanFactory
获取Spring容器
5.如果存在类实现 BeanPostProcessor(预处理Bean) ,执行postProcessBeforeInitialization,假如对多个对象做相同事情的处理可以使用
6.如果Bean实现InitializingBean 执行 afterPropertiesSet
7.调用 指定初始化方法 init
8.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessAfterInitialization
执行业务处理
9.如果Bean实现 DisposableBean 执行 destroy
10.调用 指定销毁方法 customerDestroy
集合注入
集合的注入都是给添加子标签
数组:< array>
List: < list>
Set:< set>
Map:< map> ,map存放k/v 键值对,使用< entry>描述
Properties:< props> < prop key=""></ prop>
注解注入
注解:就是一个类,使用@注解名称,用来取代 xml配置文件
@Component
@component取代
@Component(“id”)取代
web开发,提供3个@Component注解衍生注解
@Repository(“名称”):dao层
@Service(“名称”):service层
@Controller(“名称”):web层
注意:这里不用components注解而是具体用了这三个注解主要是因为依赖注入的顺序问题,执行的顺序为@Repository–>@Service–>@Controller
假如以上设置过id
@Autowired:自动根据类型注入
@Qualifier(“名称”):指定自动注入的id名称
或:@Resource(“名称”)
@Autowired是根据类型注入值,比较方便,所以最常用!!
@Scope
单例singleton或多例prototype
@ PostConstruct 自定义初始化
@ PostConstruct 自定义初始化
@ PreDestroy 自定义销毁