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两种最为常用 **************************************************************************************************************
spring笔记
最新推荐文章于 2023-06-29 21:09:27 发布
本文详细介绍了Spring框架的核心特性,包括控制反转(Ioc)的概念,如BeanFactory和ApplicationContext的应用,依赖注入的三种方式,以及Bean的作用域。此外,还涵盖了Spring的事务管理,包括编程式和声明式事务,并探讨了SSH整合中的事务处理。
摘要由CSDN通过智能技术生成