您的位置:首页 > 编程语言 > Java开发

spring

2015-07-20 22:30 549 查看
1、spring是什么?

struts是web框架(JSP/Action/Actionfrom)

spring是容器框架,用于配置bean,并维护bean之间的框架

spring中有一个非常概念:bean(是JAVA中的任何一种对象JAVAbean/service/Action/数据源/dao,IOC,di)

框架图



spring

项目中spring的引入

1、引入spring的开发包

2、创建spring的一个核心文件ApplicationContext

3、配置bean

在容器中配置bean(service/dao/domain/Action/数据源)

bean元素的作用是,当我们的spring框架加载的时候,spring就会自动创建一个bean对象,并放入内存

UserService userService=new UserService();

UserService.setName(“lqf”);

lqf

在Test.java中,使用配置的bean

1、得到spring的ApplicationContext对象(容器对象)

ApplicationContext  ac=new classPathXMLApplicationContext("ApplicationContext.XML");
UserService us=(UserService)ac.getBean("userService");


使用us即可使用UserService类中的方法。

传统的方法和使用spring的方法

1、使用spring,没有new对象,把创建对象的任务交给spring框架

spring的运行原理图:

[spring](![]http://img.blog.csdn.net/20150720211721072]

spring实际上是一个容器框架,可以配置各种bean(Action/Service/domain/dao)

并且可以维护bean与bean之间的关系,当我们需要使用某个bean的时候,我们可以getbean(ijiked使用)

IOC

IOC(inverse of controll)控制反转;控制反转就是把创建对象(bean),和维护对象(bean)

的关系的权利从程序中转移到spring的容器(ApplicationContext.XML),而程序本身不再维护

DI

di(dependency injection)依赖注入;di和IOC是同一个概念,spring设计者认为DI更准确表示spring核心技术

框架的重点在于学习配置。

spring开发提倡接口编程,配合DI技术可以层与层的解耦。

从ApplicationContext应用上下文容器中获取bean和从bean工厂容器中获取bean

从ApplicationContext中取bean

ApplicationContext ac=new ClassPathXmlApplicationContext(”com/candoc/beans.xml”);

当我们去实例化beans.XML,该文件配置的bean被实例(改bean scope是singleton)

如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么容器中的bean不被实例化,只有当你去使用

getBean某个bean时,才会被实时创建。

Beanfactory factory=new XmlBeanFactory(new ClassPathResource(”com/candoc/beans.xml”););

factory.getBean(“student”);

结论

1、如果使用ApplicationContext,则配置的Bean如果是singlton,不管用不用,都被实例化

(优点:预先加载,缺点:消耗内存)

2、如果是Beanfactory,则当你获取Beanfactory时候,配置Bean不会马上实例化,当你使用的时候才被实例

(优点:节约内存,缺点:速度慢)

3、一般情况下使用ApplicationContext

Bean的scope

-singleton   在每个spring IOC容器中一个Bean定义对应一个对象实例。
-property    一个Bean定义对应多个对象实例。
-request    在一次HTTP请求中,一个Bean定义对应一个实例;既每次HTTP请求将会有各自的Bean实例,他们依据某个Bean定义创建而成。该作用域仅在基于web的spring ApplicationContext情形下有效。
-session    在一个HTTP  session中,一个Bean定义对应一个实例。该作用域仅在基于web的spring Application情形下有效。


测试获取两个Bean实验 在spring中的scope配置不同的属性

Student s1=(Student)ac.getBean(“student”);

Student s2=(Student)ac.getBean(“student”);

System.out.println(s1+”“+s2);

三种获取ApplicationContext对象引用的方法

1、ClassPathXmlApplicationContext-》通过类路径

2、FileSystemXmlApplicationContext-》通过文件路径

Case:ApplicationContext ac=new FileSystemXmlApplicationContext(”文件路径Beans.xml/ApplicationContext.xml”);

3、ServletContext servletContext = request.getSession().getServletContext();

ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

Bean的生命周期

1、实例化(当程序加载beans.xml文件),把我们的bean(前提scope=singleton)实例化到内存

2、调用set方法设置属性

3、如果实现了bean名字关注借口(BeanNameAware)则,可以通过setBeanName获取ID号

4、如果实现了Bean工厂关注接口,(BeanfactoryAware),则可以获取BeanFactory

5、如果实现了ApplicationContextAware接口,则调用方法

// 改方法传递ApplicationContext

public void setApplicationContext(ApplicationContext arg)throws BeanException{

System.out.println(“setApplicationContext”+arg); }

6、如果Bean和一个后置处理器关联,则会自动去调用ObjectpostProcessBeforeInitialization方法

7、如果实现InitializingBean接口,则会调用afterPropertiesSet

8、如果自己在则可以在Bean定义自己的初始化方法。

9、如果Bean和一个后置处理器关联,则会自动去调用ObjectpostprocessAfterInitialization方法

10、使用Bean

11、容器关闭

12、可以通过实现DIsposableBean接口调用方法destory

13、可以在调用定制的销毁方法

通过Beanfactory来获取的Bean对象,Bean的生命周期和ApplicationContext获取的Bean的生命周期是不一样的

Bean是工厂中创建的生命周期会简单一些。



spring生命周期

配置Bean的细节

1、scope的说明



一般使用scope=”singleton”,使用property对性能的影响较大

2、如何给集合类型注入值

JAVA中主要的集合有几种:map、List、Set、数组

Departmenpublic class Department {

private String name;

private String [] empName;

private List empList;

private Set empsets;

private Map
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: