java---Spring

 spring是什么?

struts 是 web 框架 (jsp/action/actionfrom)

hibernate 是 orm框架,处于持久层.

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

 spring中有一个非常概念:bean (是java中的任何一种对象 javabean/service/action/数据源./dao, ioc(控制反转 inverseof control) di( dependency injection 依赖注入)

                            ioc或者说di,还可以达到解耦的目的


 

 

快速入门

开发一个spring项目.

 

1.       引入spring的开发包(最小配置spring.jar该包把常用的jar都包括, 还要写日志包 common-logging.jar

2.       创建spring的一个核心文件applicationContext.xml, [hibernate有核心 hibernate.cfg.xmlstruts核心文件 struts-config.xml], 该文件一般放在src目录下,该文件中引入 xsd文件:

可以从给出的案例中拷贝一份.

3.       配置bean

<!-- 在容器文件中配置bean(service/dao/domain/action/数据源) -->

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

UserServiceuserSerivce=new UserService();

userSerivce.setName("韩顺平");

-->

<bean id="userService"class="com.service.UserService">

<!-- 这里就体现出注入的概念.-->

<propertyname="name">

           <value>韩顺平</value>

</property>

</bean>

4.       在Test.java中,我们怎么使用

//我们现在使用spring来完成上面的任务

                   //1.得到spring 的applicationContext对象(容器对象)

                   ApplicationContextac=new ClassPathXmlApplicationContext("applicationContext.xml");

                   UserServiceus=(UserService) ac.getBean("userService");

                   us.sayHello();

5.       细节讨论?

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

5.1    使用spring ,没有new 对象,我们把创建对象的任务交给spring框架

8.2 spring的运行原理图:


 

 

//spring 实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean之间的关系,当我们需要使用某个bean的时候,我们可以使用getBean(id);

 

//ioc是什么?

答 :ioc(inverse ofcontroll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护.

 

//DI是什么?

答: di(dependencyinjection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术

 

//学习框架,最主要的是学习各个配置

 

//spring 开发者提倡接口编程,配合di技术可以实现层与层的解耦

           创建一个接口 ChangeLetter

两个类实现接口

把对象配置到spring容器中

使用

//通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层(web层) 和 业务层的耦合度


8.3 Bean

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

ApplicationCotext,spring更加高级的容器。功能

强大:

1.提供文本信息解析工具,包括对国际化支持。

2.提供载入文件资源的通用方法,如图片。

3.可以向注册为监听器的bean发送事件。

在很少的情况下,使用BeanFactory,如在移动设

备。

三种经常用到的实现:

1.ClassPathXmlApplicationContext:从类路径中加载。

2.FileSystemXmlApplicationContext:从文件系统加载。

3.XmlWebApplicationContext:从web系统中加载。

 

ApplicationContext context =   new FileSystemXmlApplicationContext(" c:\foo.xml");

ApplicationContext context =   new ClassPathXmlApplicationContext(" foo.xml");

 

具体案例:

//从ApplicationContext中取bean

ApplicationContextac=new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");

//当我们去实例化beans.xml,该文件中配置的bean被实例(该bean scope是 singleton)从bean中取出student

                  

                  

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

                   //容器的bean不被实例化,只有当你去使用getBean某个bean时,才会实时的创建.

                  

                   BeanFactoryfactory = new XmlBeanFactory( newClassPathResource("com/hsp/ioc/beans.xml"));

                   factory.getBean("student");

 

结论:

1.如果使用ApplicationContext,则配置的bean如果是 singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)

2.如果是 BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)

3.规定: 一般没有特殊要求,应当使用ApplicatioContext完成(90%)

u  bean 的  scope的细节

 

 

bean的生命周期

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

2.      调用set方法设置属性

3.      如果你实现了bean名字关注接口(BeanNameAware) 则,可以通过setBeanName获取id号

4.      如果你实现了 bean工厂关注接口,(BeanFactoryAware),则可以获取BeanFactory

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

//该方法传递ApplicationContext

public voidsetApplicationContext(ApplicationContext arg0)

                    throwsBeansException {

           // TODOAuto-generated method stub

           System.out.println("setApplicationContext"+arg0);

          

}

6.      如果bean 和一个后置处理器关联,则会自动去调用Object postProcessBeforeInitialization方法

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

8.      如果自己在<bean init-method=”init” /> 则可以在bean定义自己的初始化方法.

9.      如果bean 和一个后置处理器关联,则会自动去调用Object postProcessAfterInitialization方法

10.  使用我们的bean

11.  . 容器关闭

12. 可以通过实现DisposableBean接口来调用方法 destory

13. 可以在<bean destory-method=”fun1”/> 调用定制的销毁方法

         小结: 我们实际开发中往往,没有用的这么的过程,常见的是:

1->2->6->10->9->11

 

问题:通过BeanFactory来获取bean对象,bean的生命周期是否和Applicationcontext 是一样吗?

不是一样的,bean是工厂中创建的生命周期会简单一些:

 

除了应用上下文提供的附加功能外,应用上下文

与bean工厂的另一个重要区别是关于单例bean

如何被加载。

bean工厂延迟加载所有bean,直到getBean()

方法被调用。

应用上下文会(applicationContext)在启动后预载入所有单例bean.这样可确保应用不需要等待他们被创建。

 *应用上下文容器,在启动后,只会预加载所有的单例bean ,如果bean 的scope=“prototype|request|session”,并不会预加载,而是交给程序去维护



配置bean的细节

Scope的说明

☞ 尽量使用 scope=”singleton”,不要使用prototype,因为这样对我们的性能影响较大.

<bean scope=“singleton|prototype|request|session” />

singleton: 单例 默认值

prototype: 原型 

request: 一次请求有效( javaweb开发中)

session: session级有效(java web开发中)

bean工厂介绍

工厂设计模式,创建分发各种bean。配置好它们之

间的写作关系,参与bean的生命周期。

BeanFactory factory = new XmlBeanFactory(

newClassPathResource("applicationContext.xml"));

bean工厂只把bean的定义信息载进来,用到的时候

才实例化。

factory.getBean("mybean");就可得到一个

bean。

bean工厂:最简单的容器,提供了基础的依赖

              注入支持。创建各种类型的Bean.

应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务。

1.4     装配bean

bean工厂:最简单的容器,提供了基础的依赖 注入支持。创建各种类型的Bean.

应用上下文(ApplicationContext):建立在bean工厂基础之上,提供系统架构服务

 

 

1.4.1  beanFactory

<bean scope=“singleton|prototype|request|session” />

singleton: 单例默认值

prototype: 原型 

request: 一次请求有效( java web开发中)

session: session级有效(java web开发中)

 

1 bean工厂介绍

工厂设计模式,创建分发各种bean。配置好它们之间的写作关系,参与bean的生命周期。

BeanFactory factory = new XmlBeanFactory(newClassPathResource("applicationContext.xml"));

bean工厂只把bean的定义信息载进来,用到的时候才实例化。

factory.getBean("mybean");就可得到一个bean。

 

 

8.4.3 bean的生命周期 

bean被载入到容器中时,他的生命周期就开始了。:

1.容器寻找bean的定义信息并实例化。

2.使用依赖注入,spring按bean定义信息配置bean的所有属性。

3.若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName

  ()方法传递bean的ID。

4.若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()

   方法传入工厂自身。

5.若BeanPostProcessor(bean后置处理器)和bean关联,则它们的

  postProcessBeforeInitialization()方法被调用。 [过滤器举例理解]

6.若bean指定了ini-method方法、,它将被调用。

7.最后,若有BeanPostProcessor和bean关联,则它们的

  postProcessAfterInitialization()方法被调用、。

 

将bean从工厂中删掉有两种方法:

1.若bean实现了DisposableBean接口, distroy()方法被调用。

2.如果指定了定制的销毁方法,就调用这个方法

 

 

 

1.5     Bean基本装配

装配bean的时候,需要告诉容器哪些bean以及容器如何使用依赖注入将它们配合在一起。

 

      使用XML装配

几种spring容器都支持使用xml装配bean,包括:

   1.XmlBeanFactory:调用ClassPathResource载入上下文

      定义文件(比如applicationContext.xml)。

   2.ClassPathXmlApplicationContext:从类路径载<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值