spring笔记

本文详细介绍了Spring框架的核心特性,包括控制反转(Ioc)的概念,如BeanFactory和ApplicationContext的应用,依赖注入的三种方式,以及Bean的作用域。此外,还涵盖了Spring的事务管理,包括编程式和声明式事务,并探讨了SSH整合中的事务处理。
摘要由CSDN通过智能技术生成
spring框架的优点
    1,方便解耦,简化开发,可以将所有对象创建和依赖关系维护交给spring管理
    2,Aop编程支持,spring提供面向切面编程,可以方便地实现对程序进行权限拦截,运行监控等功能。
    3,声明式事务的支持,只需通过配置就可以完成对事务的管理,而无须手动编程
    4,方便程序的测试,spring对Junit4支持,可以通过注解方便地测试spring程序
    5,方便集成各种优秀框架,其内部提供了对各种优秀框架的直接支持,struts2,Hibernate,Mybatis等
    6,降低javaEE API的使用难度,对一些难用的javaEE API进行了封装,JDBC,JavaMail,远程调用等
**************************************************************************************************************
spring的Ioc容器
    所谓的Ioc是指在程序设计中,实例不再由调用者来创建,而是由spring容器来创建,spring容器会负责控制程序之间的关系
    而不是由程序代码直接控制,这样控制权由应用代码转移到了外部容器,控制权发生了反转,也就是spring的Ioc(控制反转)的思想
    spring为我们提供了两种Ioc容器,分别为BeanFactory,ApplicationContext

    BeanFactory接口有多种实现,最常见的是使用XmlBeanFactory根据Xml配置文件中的定义来装配Bean
    BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("F:/applicationContext.xml"));
    这种加载方式在实际开发中并不多见,只做了解就好。

    ApplicationContext是BeanFactory的子接口,也被称为应用上下文,创建ApplicationContext接口实例,通常采用两种方法
    ClassPathXmlApplicationContext:从类路径中的Xml文件载入上下文定义信息,把上下文定义文件当作类路径资源,创建语法如下:
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    FileSystemXmlApplicationContext:从文件系统中(指定的路径下)的XML文件载入上下文信息,创建语法如下:
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext
        ("F:\\workspaces\\Spring\\src\\applicationContext.xml");
    两种容器的区别在于,BeanFactory采用了延迟加载方案,只有在调用getBean()时才会实例化Bean,如果Bean的某个属性没有注入,
    使用BeanFactory加载后,在第一次调用getBean()方法时会抛出异常,而ApplicationContext则在初始化时自检,在容器启动后会
    一次性创建所有Bean,这样有利于检查所依赖的属性是否注入。

依赖注入
    依赖注入DI,它与控制反转含义相同,只不过这两个称呼是从两个角度描述同一个概念,依赖注入的作用就是在使用Spring框架创建对象时,
    动态地将其所依赖的对象注入到Bean组件中
    依赖注入存在三种实现方式,分别是setter方法注入,构造方法注入和接口注入,具体介绍如下:
    属性setter注入:指Ioc容器使用setter方法来注入被依赖的实例,通过调用无参构造器或无参static工厂方法实例化Bean后
    调用该Bean的setter方法,即可实现基于setter的DI
    构造方法注入:指Ioc容器使用构造方法来注入被依赖的实例,基于构造器的DI通过调用带参数的构造方法来实现,每个参数代表一个依赖
    接口注入:spring容器不支持接口注入
******************************************************************************************************************
Bean的实例化
    在Spring中,实例化Bean有三种方式,分别为构造器实例化,静态工厂方式实例化和实例工厂方式实例化
    构造器实例化,就是Ioc包下的Demo,什么都没有写,spring容器会自动调用默认的无参构造器对Bean实例化
    静态工厂方式实例化,该方式要求自己创建一个静态工厂的方法来创建Bean的实例
        1,创建一个普通Bean类
        public class StaticBean {
            public void demo()
            {
                System.out.println("测试静态工厂方式实例化。。。。。。。。。。。");
            }
        }
        2,创建一个静态工厂类,并编写静态方法用来返回对象
        public class MyStaticFactory {

            public static StaticBean createBean()
            {
                return new StaticBean();
            }
        }
        3,applicationContext.xml中
        <bean id="staticBean" class="top.kubino1.StaticBean.MyStaticFactory" factory-method="createBean"/>
        4,测试案例
        @Test
        public void staticBeanTest()
        {
            //StaticBean包下测试
            StaticBean staticBean = (StaticBean) applicationContext.getBean("staticBean");
            staticBean.demo();
        }
        静态工厂方式不需要实例化工厂类对象,直接返回Bean对象
    实例工厂方式实例化,该种方式的工厂类中,不再使用静态方法创建Bean实例,而是采用直接创建Bean实例的方式,同时,在配置文件中
    需要实例化的Bean也不是通过class属性直接指向其实例化的类,而是通过factory-bean属性配置一个实例工厂,然后使用factory-method
    属性确定使用工厂中的哪个方法
        1,创建普通的Bean类
        public class ObjectBean {
            public void demo()
            {
                System.out.println("测试动态工厂方式实例化。。。。。。。。。。。。。。。");
            }
        }
        2,创建实例工厂类,并编写工厂方法用来创建Bean
        public class MyObjectFactory {

            public MyObjectFactory() {
                System.out.println("动态工厂类正在实例化。。。。。。。。。。。。");
            }
            public ObjectBean createBean()
            {
                return new ObjectBean();
            }
        }
        3,applicationContext.xml中配置
        <bean id="objectBeanDemo" class="top.kubino1.ObjectBean.MyObjectFactory"/>
        <bean name="objectBean" factory-bean="objectBeanDemo" factory-method="createBean"/>
        4,测试用例
        @Test
        public void objectBeanTest()
        {
            //ObjectBean包下测试
            ObjectBean objectBean = (ObjectBean) applicationContext.getBean("objectBean");
            objectBean.demo();
        }
    注意:我碰到一个疑问,在配置实例工厂方式实例化时,测试时没错,但当我测试其他例子时,会自动创建MyObjectFactory工厂类实例
    因为我看到在每个测试案例下都运行了实力工厂类的构造器,并运行了其中打印代码”"System.out.println("动态工厂类正在实例化。。。。。。。。。。。。");"
    我不知道为啥,,,,,
****************************************************************************************************************
Bean的作用域
Spring容器在初始化一个Bean实例时,可以同时为其指定特定的作用域,Spring3为Bean实例定义了5种Bean的作用域
    singleton:单例模式,使用singleton定义的Bean在spring容器中将只有一个实例,也就是说,无论多少个Bean引用它,始终将指向同一对象
    这也是spring容器默认的作用域
    prototype:原型模式,每次通过spring容器获取的prototype定义的Bean时,容器都将创建一个新的Bean实例
    request:在一次HTTP请求中,容器会返回该Bean的同一个实例,而对不同的HTTP请求则会产生一个新的Bean,而且该Bean仅在当前HTTP Request内有效
    session:在一个HTTP Session中,容器会返回该Bean的同一个实例,而对不同的HTTP 请求则会产生一个新的Bean,而且该Bean仅在当前HTTP Session内有效
    global Session:在一个全局的HTTP Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效
    上面5种作用域中,singleton和prototype两种最为常用
**************************************************************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值