Spring简介
一.Spring工作原理
1.Spring是一种用JavaBean配置应用程序的方法运用SpringIOC,通过setter方法来暴露一个类的任何依赖关系(如一个数据库连接),只要在Spring中进行配置来解决依赖性,不用编写一个数据库连接
2.运用Spring AOP 可以解决公共代码重复问题
二.Spring框架优势
轻量级容器开源框架
用于解决企业应用程序开发复杂性
一个轻量级的IOC和AOP容器框架
一个解决了许多J2EE开发中常见的问题的强大框架
三.Spring Bean的封装机制
1.Sprin Bean封装机制
1.Spring以Bean的方式管理所有的组件,J2EE的全部组件都被视为Bean管理
2.Spring负责创建Bean的实例,并管理其生命周期
3.Bean在Spring的容器中运行,无须知道Spring容器的存在也可以使用Spring的一些特性
四.Spring Bean的封装机制
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id=“实体类名” class="实体类对象"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
</bean>
</beans>
五.BeanFactory
由org.springframework.beans.factory.BeanFactory接口定义
BeanFactory是工厂类,负责创建和管理bean
包含以下基本方法
containBean(String name) //判断是否由文件
getBean(String name)
getBean(String name,Class class)
getType(String name)
六.ApplicationContext
ApplicationContext是基于BeanFactory之上的,提供了应用程序框架服务,扩展的新功能如下
1.提供国际化支持
2.资源访问,如URL和文件
3.事件传递
4.载入多个配置文件
//单个文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml")//括号内配置文件名
//多个文件
BeanFactory beanFactory = new ClassPathXmlApplicationContext(new String[]("applicationContext.xml","bean.xml"))
ApplicationContext接口方法
例子:
//以classpath路径下的applicaionContext.xml创建Spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//从Spring容器中获取idw为userdeBean
User user = (User)applicationContext.getBean("user");或者
User user = applicationContext.getBean("user",User.class);
//封装数据
user.get...
七.Spring DI/IOC
Spring的依赖注入:是指程序运行过程中,如果需要调用另一个对象协助时,无需在代码中创建被调用者,而依赖于的注入
1.Spring的设值注入方式
设值注入时指通过setter方法传入被调用者的实例
例子:
计算机的组成。主机,显示器
被调用者的实体对象
public class MainFrame {private String modelType;//型号
// 输出主机信息
public void
printMainFrameInfo() {
System.out.println("主机型号:" + modelType)
//定义一个计算机类
pbulic class Computer{
private MainFrame mainFrame;//主机
private Display display;//显示器接口
//输出计算机配置信息
public void printComputerInfo() {
System.out.println("计算机配置如下:");
mainFrame.printMainFrameInfo();// 输出主机信息
display.printDisplayInfo();// 输出显示器信息
}
Spring配置文件
<bean id="user" class="cn.yunhe.model.User">
</bean>
<bean id="sanxing" class="cn.yunhe.model.Sanxing" />
<bean id="lg" class="cn.yunhe.model.Lg" />
<bean id="mainFrame" class="cn.yunhe.model.MainFram">
<property name="modelType" value="三星高配主机" />
</bean>-->
<!--设值注入-->
<!--计算机高配主机-->
<!-- <bean id="computer" class="cn.yunhe.model.Computer">
<property name="mainFram" ref="mainFrame"/>
<property name="display" ref="lg"/>
</bean>-->
<!--构造注入-->
<!-- <bean id="computer" class="cn.yunhe.model.Computer">
<constructor-arg index="0" ref="mainFrame"/>
<constructor-arg index="1" ref="sanxing"/>
</bean>-->
<!--自动注入-->
<!-- <bean id="computer" class="cn.yunhe.model.Computer" autowire="byName">
<property name="display" ref="lg"/>
</bean>-->
<!--集合属性-->
<!-- <bean id="testBean" class="cn.yunhe.model.TestBean">
<property name="list">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>-->
<!--自动扫描被注册的类-->
<context:component-scan base-package="cn.yunhe.model"/>
八。基于注解的容器配置 扫描 @Component标注的类
@Autowired注解 可有对类成员变量。方法及构造方法进行标注,以完成自动装配的任务
@Autowired默认按byType自动注入
@Resource默认按照byName自动注入
@Component
public class Computer {
@Resource
private MainFram mainFram;//主机
@Resource(name = "sanxing")
private Display display;//显示器接口
public Computer() {
}
public Computer(MainFram mainFram, Display display) {
this.mainFram = mainFram;
this.display = display;
}
@Component
public class MainFram {
private String modelType;//型号
//输出主机信息
@Value("小样")
public void printMainFramelnfo(){
System.out.println("主机型号:"+modelType);
}
public String getModelType() {
return modelType;
}
public void setModelType(String modelType) {
this.modelType = modelType;
}
}