首页 > 编程语言 > 详细

Spring【持续更新】

时间:2020-06-10 15:38:13      阅读:59      评论:0      收藏:0      [点我收藏+]

Spring简介

Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版。Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。

Spring总结起来优点如下:

  • 低侵入式设计,代码的污染极低。
  • 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺。
  • Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦。
  • Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用。
  • Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
  • Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。

Spring的核心机制

管理Bean

程序主要是通过Spring容器来访问容器中的Bean,ApplicationContext是Spring容器最常用的接口,该接口有如下两个实现类:

  • ClassPathXmlApplicationContext: 从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器。
  • FileSystemXmlApplicationContext: 从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件来创建Spring容器。
public class BeanTest{
    public static void main(String args[]) throws Exception{
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        Person p = ctx.getBean("person", Person.class);
        p.say();
    }
}

  当一个Bean既使用自动装配依赖,又使用ref显式指定依赖时,则显式指定的依赖覆盖自动装配依赖;对于大型的应用,不鼓励使用自动装配。虽然使用自动装配可减少配置文件的工作量,但大大将死了依赖关系的清晰性和透明性。依赖关系的装配依赖于源文件的属性名和属性类型,导致Bean与Bean之间的耦合降低到代码层次,不利于高层次解耦。

<!--通过设置可以将Bean排除在自动装配之外-->
<bean id="" autowire-candidate="false"/>

<!--除此之外,还可以在beans元素中指定,支持模式字符串,如下所有以abc结尾的Bean都被排除在自动装配之外-->
<beans default-autowire-candidates="*abc"/>

<!-- bean 标签:用于配置让 spring 创建对象,并且存入 ioc 容器之中 id 属性:对象的唯一标识。 class 属性:指定要创建对象的全限定类名 --> 
<!-- 配置 service -->

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"> </bean> 
<!-- 配置 dao -->

<bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"></bean>

IOC 中 bean 标签和管理对象细节
1. bean 标签 

作用:
用于配置对象让 spring 来创建的。  默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。
属性: 
id:给对象在容器中提供一个唯一标识。用于获取对象。 
class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
scope:指定对象的作用范围。  
* singleton :默认值,单例的。
* prototype :多例的。
* request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中。
* session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中
* global session :WEB 项目中,应用在 Portlet 环境.如果没有 Portlet 环境那么 globalSession 相当于 session。
init-method:指定类中的初始化方法名称。
destroy-method:指定类中销毁方法名称。 

2 bean 的作用范围和生命周期 

单例对象:scope="singleton" 
    一个应用只有一个对象的实例。它的作用范围就是整个引用。 
    生命周期: 
        对象出生:当应用加载,创建容器时,对象就被创建了。 
        对象活着:只要容器在,对象一直活着。 
        对象死亡:当应用卸载,销毁容器时,对象就被销毁了。 
多例对象:scope="prototype"
    每次访问对象时,都会重新创建对象实例。 
    生命周期: 
        对象出生:当使用对象时,创建新的对象实例。 
        对象活着:只要对象在使用中,就一直活着。 
        对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。 

 

Spring【持续更新】

原文:https://www.cnblogs.com/qfcddl/p/13085153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!