1、Spring概述:
1)Spring是一个分层的“一站式”轻量级开源框架。
2)Spring中的两大核心技术:IOC和AOP:
IOC(Inverse of Control 反转控制): 将对象创建权利交给Spring工厂进行管理。
AOP(Aspect Oriented Programming 面向切面编程),基于动态代理功能增强。
3)Spring的优势:
①方便解耦,简化开发
②AOP编程的支持
③声明式事务的支持
④方便程序的测试
⑤方便集成各种优秀框架
⑥降低JavaEE API的使用难度
2、Spring IOC入门:
1)IOC,它是Inverse of Control的缩写,中文含义是控制反转,表示将对象的创建权力反转给Spring框架!!
IOC解决的问题:使用IOC可以解决的程序耦合性高的问题。
2)什么是程序的耦合:类与类之间有些不可避免的依赖关系,这种依赖关系称之为耦合。
3)创建工厂类解决耦合性的问题:BeanFactory 专门用来生产bean的工厂类
4)创建配置文件彻底解决耦合性的问题:bean.xml
5)Spring开发包:官网地址:https://spring.io/
下载网址:http://repo.spring.io/libs-release-local/org/springframework/spring/
3、Spring中的工厂:
在spring中提供了两个工厂接口:
1)ApplicationContext接口:使用该接口可以获取到具体的Bean对象。
该接口下有两个具体的实现类:
①ClassPathXmlApplicationContext -- 加载类路径下的Spring配置文件
②FileSystemXmlApplicationContext -- 加载本地磁盘下的Spring配置文件
2)BeanFactory工厂:BeanFactory是Spring框架早期的创建Bean对象的工厂接口。
3)BeanFactory和ApplicationContext的区别:
①BeanFactory -- BeanFactory采取延迟加载,第一次getBean时才会初始化Bean
②5ApplicationContext -- 在加载applicationContext.xml时候就会创建具体的Bean对象的实例
4、Spring配置文件:
1)id属性:id属性是bean的唯一标识。
2)class属性:bean的全路径名。
3)scope属性:scope属性代表Bean的作用范围。
singleton:单例(默认值) prototype:多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,配置把Action类配置成多例!! request:应用在web应用中,将创建的对象存入到request域中。 session:应用在web应用中,将创建的对象存入到session域中 globalsession:应用在porlet环境下使用。将创建的对象存入到全局的session中。 |
4)init-method属性:初始化方法。
当bean被载入到容器的时候调用init-method属性指定的方法。
5)destroy-method属性:销毁方法。
当bean从容器中删除的时候调用destroy-method属性指定的方法。
想查看destroy-method的效果,有如下条件:scope= singleton有效
web容器中会自动调用,但是main函数或测试用例需要手动调用(需要使用ClassPathXmlApplicationContext的close()方法)
5、Spring生成bean的三种方式:
1)无参构造方法:默认调用无参构造方法实例化bean。
2)静态工厂实例方法:通过调用工厂类的静态方法来生成bean。
有static修饰。在配置文件中,配置某个实现类的bean时,class属性写的不是实现类的全路径名,而是工厂类的全路径名;
factory-method:指定工厂类中静态方法的名字
3)实例工厂实例化方式:
没有static修饰。在配置文件中,用实例工厂方法来实例化。
factory-bean:指定工厂bean的id;
factory-method:指定工厂bean的实例工厂方法的名字。
6、依赖注入:
1)什么是依赖注入:
IOC和DI的概念:
① IOC -- Inverse of Control,控制反转,将对象的创建权反转给Spring。
②DI -- Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中。
2)构造方法注入:构造方法注入就是利用bean的构造方法完成对bean中属性的赋值。提供有参构造方法。
配置文件中配置:<constructor-arg name="" value=""></constructor-arg>
3)set方法注入:就是利用bean中属性的set方法对属性赋值。提供实体类中属性的set方法,不需要提供有参构造方法。
配置文件中配置:普通属性用value指定值,对象属性用ref指定需要注入的bean的id。
<bean id="" class="实体类的全路径">
<property name="" value=""></property>
<property name="" ref=""></property>
</bean>
4)set方法其他注入写法:
①p命名空间的写法:
语法:p:简单属性名=”值”
p:对象属性名-ref=”bean的id”
②SpEL(Spring Expression Language)的写法:
SpEL注入的语法是:
注入字符串:#{‘字符串’}
注入数字:#{数字}
注入其它对象:#{对象id}
5)数组或list注入:配置文件中配置:
<bean id="" class="实体类的全路径">
<property name="list">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
</bean>
6)Set集合的注入:
①添加一个Set类型的属性并提供set方法
②为Set类型的属性注入值
③spring在注入set的时,给我们注入的是一个LinkedHashSet,所以在输入set集合中的元素时,是按照我们注入的顺序来的,并不是无序的
7)Map集合的注入:
①添加一个Map类型的属性并提供set方法
②为Map输入注入值
③<property name="map">
<map>
<entry key="id" value="1"></entry>
</map>
</property>
说明:<entry>表示map中的一个键值对;<entry>的key表示键,value表示值;
8)Properties的注入:
①添加一个Properties类型的属性并提供set方法
②给Properties类型的属性注入值
③<property name="properties">
<props>
<prop key="id">2</prop>
</props>
</property>
说明:<prop>:表示一个键值对;<prop>中的key表示键,在<prop></prop>中写的是值;
9)配置文件的分离:
Spring配置文件的分离有两种方式:
方式一:在applicationContext.xml中采用import标签导入另一个配置文件。<import resource="xxx.xml"/>
方式二:在实例化ApplicationContext的时候,指定多个配置文件。
7、Spring IOC的注解开发:
1)创建Java工程并导入jar包
2)创建包结构并编写Java类
3)在Java类上添加注解:@Component
4)在applicationContext.xml中引入约束
5)在applicationContext.xml中开启注解扫描:
<context:component-scan base-package=""></context:component-scan>
8、Spring框架中bean管理的常用注解:
1)用于创建对象的有四个:@Component,@Controller,@Service,@Repository
2)用于给对象中的属性注入值有四个:@Value,@Autowired,@Qualifier,@Resource
3)用于改变作用范围:@Scope指定bean的作用域,默认值是singleton,单例的。
4)用于定义生命周期:加在方法上 @PostConstruct注解,@PreDestroy注解,
相当于:<bean id="" class="" init-method="" destroy-method="" />
注意:要看到@PreDestroy的效果,需要调用ClassPathXmlApplicationContext.close方法,同时scope的值要是singleton。
9、XML和注解的比较:
注解的优势:配置简单,维护方便。(我们找到了类,就相当于找到了配置)
XML的优势:修改时,不用改源码。不涉及重新编译和部署。