spring

1、spring是什么?
struts是web框架(JSP/Action/Actionfrom)
spring是容器框架,用于配置bean,并维护bean之间的框架
spring中有一个非常概念:bean(是JAVA中的任何一种对象JAVAbean/service/Action/数据源/dao,IOC,di)

框架图
spring
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](![https://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生命周期
spring生命周期

配置Bean的细节
1、scope的说明
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值