spring学习(2)

理解反向控制(IOC)

依赖注入(di):比IOC更好地名字。获得依赖对象的方式反转了。

IOC应用

IOC或者di,还可以达到解耦的目的。

spring开发提倡接口编程,配合di技术,可以更好地达到程序间的解耦,解决层与层之间的解耦。

现在我们体验一下spring的di配合接口编程,完成一个字母大小写转换的案例:

思路:

1.创建一个接口 changeLetter

2.两个类实现这个接口

3.把对象配置到spring容器中

4.使用

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

思考题:

接口

ValidateUser

有一个方法

check(??)

有两个类

CheckUser1 implement ValidateUser

{

check//安装xml验证

}

CheckUser2 implement ValidateUser{

check()//到数据库去验证

}

通过set方法注入依赖

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

应用上下文(ApplicationContext)

配置bean,beans.xml/applicationcontext.xml

<bean>

</bean>

bean工厂,

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

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

bean的属性

singleton,只要这个容器没有死亡,就只有这个bean

request,声明周期在一次http请求中

session声明周期:一个会话。

global session 在一个全局的http Session中,一个bean定义对应一个实例。只要spring还没有关闭,则一直有效。

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

//从ApplicationContext中去bean
        //ApplicationContext ac = new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");
        //当我们去实例化beans.xml的时候,该文件中配置的bean被实例化(该bean 是singleton)
        
        //BeanFactory factory = new XmlBeanFactory()
        
        //从bean中取出student
        //如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么容器
        //的bean不能被实例化,只有当你去使用getBean某个bean时,才会实时地创建
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/hsp/ioc/beans.xml"));
        factory.getBean("student");

结论:

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

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

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

 singleton:单例 默认值

prototype:原型

request:一次请求有效

session:session内有效。

bean的scope的细节

入门案例:

beans.xml

<bean id="student" scope="prototype" class="com.hsp.ioc.Student">
<property name="name" value="小猪"/>
<bean id="student" scope="singleton" class="com.hsp.ioc.Student">
<property name="name" value="小猪"/>

测试代码

Student stu1 = (Student)ac.getBean("student");
        Student stu2 = (Student)ac.getBean("student");
        
        System.out.println(stu1);
        System.out.println(stu2);

request

session

global session

在web开发中才有意义。

三种经常用到的实现:

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

1.ClassPathXmlApplicationContext->通过类路径来加载(桌面开发使用得比较多)

2.FileSystemXmlApplicationContext->通过文件路径来获取

举例:

ApplicationContext ac = new FileSystemXmlApplicationContext("D:/javaEE/workspace/myspring1/src/com/hsp/ioc/beans.xml");
        

3.XmlWebApplicationContext 从web系统中加载。当tomcat启动时就会加载。

应用上下文会在启动后预载入所有单例bean,事先创建。

原文地址:https://www.cnblogs.com/liaoxiaolao/p/9884337.html