Spring框架部分内容
什么是Spring
Spring是一个轻量级的开源框架
Spring可以将各种框架整合在一起
Spring的核心是IOC和AOP
Spring框架的优点
将对象之间的依赖关系交给Spring,降低组件之间的耦合性
对主流的框架提供了很好的集成支持,如Hibernate,Struts2等
Spring DI机制降低了业务对象替换的复杂性
Spring的高度可开放性,并不强制依赖于Spring,开发者可自由选择
IOC/DI
IOC即控制反转,是一种设计思想
1.将主动创建对象变为被动接受
2.实现代码的解耦
DI即依赖注入,是IOC的一种实现
用容器来管理所i有对象
Spring容器
是Spring的核心,容器负责管理对象。
容器的两种实现:
BeanFactory :最简单容器,给DI提供基本支持
ApplicationContext:继承BeanFactory,有更多的功能实现
常用方法:
getBean方法:获取容器内指定对象
containBean方法:判断容器中是否存在指定的对象
isPrototype方法:判断指定的对象是否为非单例对象
isSingleton方法:判断指定的对象是否为单例对象
ApplicationContext的主要实现类
ClassPathXmlApplication:从类的根路径下加载xml配置文件
AnnotionConfigApplication:使用注解配置容器对象时,用次类创建spring容器
Xml装配Bean
使用bean标签来装配Bean对象
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(“application.xml”);
通过名字来获取Bean对象
User user = (User)ctx.getBean(“user”);
通过类型来获取Bean对象
User user1 = ctx.getBean(User.class)
默认情况下,Spring只为每个在IOC容器里声明的Bean创建一个唯一实例,整个IOC容器都能共享此实例,即单例模式
依赖注入
Bean对象中的属性值通过IOC容器进行注入,这种方式成为依赖注入
依赖注入的方式有三种
1.属性注入
通过setter方法注入
在xml中通过使用property标签来注入,其中name属性是对象中的属性名,
value是属性值。
<property name=“age” value=“20" >
集合使用list标签完成装配
2.构造器注入
通过构造方法注入,可以在创建对象时就注入属性值。
•在xml中通过使用constructor-arg标签来注入。
•在User类中需要创建一个对应的构造方法
通过index属性指定参数的顺序
<constructor-arg value="1“ index=“0”>
<constructor-arg value="张三“index=“1” >
<constructor-arg value="20“ index=“2” >
通过类型来匹配参数。
字面值:可以通过value属性或value标签来注入。
若字面值包含特殊字符,可以用<![CDATA[]]>将字面值包裹起来
<![CDATA[]]>
20
引用其他Bean
Bean对象中的属性不仅仅是基本类型或字符串,还有可能是其他Bean对象。
在XML文件中使用ref来引用其他Bean对象。
…
3.工厂方法注入
注入Properties集合
使用props标签来注入java.util.Properties对象,prop是子标签,每个
子标签必须定义key属性。
root
123456
jdbc:mysql://localhost:3306/demo
<prop key=“driverclass">org.gjt.mm.mysql.Driver
使用外部属性文件
Spring提供了BeanFactory的一个后置处理器
PropertyPlaceholderConfigurer来读取外部属性文件,在Bean配置文件中
使用${属性名}来访问对应的值。
通过context:property-placeholder来加载外部文件
<context:property-placeholder location=“classpath:db.properties”/>
d
b
u
s
e
r
<
/
p
r
o
p
>
<
p
r
o
p
k
e
y
=
"
d
b
p
a
s
s
"
>
{dbuser}</prop> <prop key="dbpass">
dbuser</prop><propkey="dbpass">{dbuser}
d
b
u
r
l
<
/
p
r
o
p
>
<
p
r
o
p
k
e
y
=
"
d
r
i
v
e
r
c
l
a
s
s
"
>
{dburl}</prop> <prop key="driverclass">
dburl</prop><propkey="driverclass">{driverclass}
基于注解装配Bean
Spring提供了以下几个注解来完成Bean的自动装配
@Autowired
作用:装配Bean
用法:配置在属性,set方法,构造方法上
按类型装配依赖对象,如果有多个类型则按名称匹配。默认
情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性
为false。
@Qualifier
配合@Autowired使用。把按类型配置变为按名称匹配
用法:配置在属性,set方法上
@Resource
作用:装配Bean
用法:配置在属性,set方法上
@Resource注解默认按名称装配。名称可以通过name属性指定,如果没有指定name属性,默认取属性的名称作为bean名称寻找依赖对象。
@PostConstruct
指定初始化方法
初始化方法在容器产生Bean对象的时候被调用
@PreDestory
销毁方法
销毁方法在容器主动调用销毁的时候被调用
需要在xml文件中加入
context:annotation-config</context:annotation-config>
配置类中的自动扫描
@ComponentScan用于指定扫描的包
@Component用于标识需要装配的类
指定从哪个类所在的包开始扫描
@ComponentScan(basePackageClasses = ApplicationLauncher.class)
指定扫描的起始包
@ComponentScan(basePackages = “Application”)