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;
}
}

posted @ 2017-07-16 14:04  l小样  阅读(137)  评论(0编辑  收藏  举报