Spring框架
Spring框架作用
- Spring Core(IOC功能)
- Spring AOP功能
(管理组件对象,维护对象关系,目的:降低组件耦合度) - Spring Web MVC功能
(MVC设计,目的:架构一个MVC结构的web程序) - Spring整合其他技术,例如JDBC,MyBatis,Hibernate,Struts
Spring–>整合API–>调用原有技术API Connection,Statement
Spring–>JdbcTemplate–>JdbcTemplate.update(sql,params);
SpringIOC应用
IOC概念:
Inversion of Control 控制反转或反向控制
改变了对象的获取方式。之前的编码方式采用new构造器凡是获取对象;ioc中采用由容器创建对象之后注入进来
1. 管理对象
创建、初始化、释放资源、销毁
2. 维护对象关系
3. 搭建SpringIOC开发环境
–引入相关jar包
–在src添加applicationContext.xml
管理对象
步骤:
一. 配置环境变量(引入jar包,导入.xml文件)
二.在.xml文件中定义bean(3种方式)
<!-- 采用new GregorianCalendar(),构造方法 -->
<bean id="c1" class="java.util.GregorianCalendar">
</bean>
<!-- 采用Calendar.getInstance(),静态工厂方法 -->
<bean id="c2" class="java.util.Calendar"
factory-method="getInstance">
</bean>
<!-- 采用c2.getTime(),对象工厂方法 -->
<bean id="date" factory-bean="c2" factory-method="getTime">
</bean>
三.实例化Spring容器,ApplicationContext
四.从Spring容器中取对象,使用getBean(“id值”)
//创建Spring容器对象
String conf = "applicationContext.xml";
ApplicationContext ac =
new ClassPathXmlApplicationContext(conf);
//从Spring容器获取对象c1
Calendar c1 = (Calendar)ac.getBean("c1");
Calendar c2 = (Calendar)ac.getBean("c2");
//使用
System.out.println("c1"+c1);
System.out.println("c2"+c2);
Date date = (Date)ac.getBean("date");
System.out.println("date="+date);
知识点:
(一)控制对象创建方式(使用范围)
scope,默认值是singleton
1. scope=”singleton”—该组件在Spring容器中只有一个bean对象
2. scope=”prototype” —该组件每次ac.getBean(“id”);都会创建一个新的对象
注:
(二)指定对象初始化方法
init-method
当创建对象后,自动执行init-method方法,等价于构造器方法
(三)指定对象销毁方法
destroy-method
满足以下条件才有效
–组件对象为单例模式(scope=”singleton”)
–调用AbstractApplicationContext容器对象的close()方法
(四)控制单例对象的创建时机
lazy-init
默认情况下,单例对象是Spring容器创建时实例化,
可以使用<bean lazy-init=”true”>将创建时机推迟到getBean()方法调用时
维护对象关系
采用注入方式建立对象关系,Depedency Injection(DI) 依赖注入。
分两种方式:
* set方法注入
* 构造器注入
* 自动注入
(一)set注入(使用多)
.xml文件中,使用<property>
<bean id="p1" class="org.tarena.bean.Computer">
<!-- 信息set注入 -->
<property name="cpu" value="骁龙">
</property>
<property name="hdd" value="索尼">
</property>
<property name="mainbord" value="华硕">
</property>
</bean>
(二)构造器注入(使用少)
.xml文件中,使用<constructor-arg>
<bean id="p2" class="org.tarena.bean.Phone">
<!-- 构造器注入 -->
<constructor-arg index="0" value="高通">
</constructor-arg>
<constructor-arg index="1" value="2G">
</constructor-arg>
</bean>
(三)自动注入(了解)
<bean autowire=”“>
用于指定自动注入规则。可以使用byType,byName,constructor等,用于简化注入配置。
使用byType类型匹配注入需要注意,有2个或2个以上匹配上,会出错。