Spring--SpringBean管理

  • ·Spring的工厂类

    可以使用FileSystemXmlApplicationContext来读取磁盘上的配置文件

    BeanFactory是调用getBean方法时才实例化对象 而 ApplicationContext是一加载配置文件就实例化对象

  • ·Spring的Bean管理(XML方式)

    三种实例化Bean的方式

    • 使用构造器实例化(默认无参数)

      Bean1

public class Bean1 {
    public Bean1(){
        System.out.println("Bean1被创建了");
    }
}

        配置文件中

    <!-- 第一种,无参构造器的方式-->
    <bean id="Bean1" class="com.windbag.ioc.demo2.Bean1"></bean>
    • 使用静态工厂方法实例化(简单工厂模式)

      Bean2  

public class Bean2 {

}

       Bean2Factory

public class Bean2Factory {
    public static  Bean2 createBean2(){
        System.out.print("Bean2Factory的方法已经执行了");
        return new Bean2();
    }
}

          配置文件    

    <!-- 第二种:静态工厂的方式-->
    <bean id="Bean2" class="com.windbag.ioc.demo2.Bean2Factory" factory-method="createBean2"></bean>
    • 使用动态工厂方法实例化(工厂方法模式)

      Bean3

public class Bean3 {
}

          Bean3Factory

public class Bean3Factory {
    public Bean3 createBean3(){
        System.out.print("Bean3Factory的方法执行了");
        return new Bean3();
    }
}

        配置文件

    <!-- 第三种:实例工厂的方式-->
    <bean id="Bean3Factory" class="com.windbag.ioc.demo2.Bean3Factory"></bean>
    <bean id="Bean3" factory-bean="Bean3Factory" factory-method="createBean3"></bean>

    Bean的配置

    • ·id和name
      •   -一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称
      •     -id 属性在IOC容器中必须是唯一的
      •   -如果Bean的名称中含有特殊字符,就需要使用name属性
    • ·class
      •   -class用于设置一个类的完全路径名称,主要作用是IOC容器生成类的实例

    Bean的作用域

    

      scope="prototype" 在spring整合struts2的action时候使用   scope="singleton"单例 这两个用的比较多

    Bean的生命周期

    

  1. instantiate bean对象实例化
  2. populate properties 封装属性
  3. 如果Bean实现BeanNameAware 执行 setBeanName
  4. 如果Bean实现BeanFactoryAware 或者ApplicationContextAware 设置工厂setBeanFactory 或者上下文对象 setApplicationContext
  5. 如果存在类实现BeanPostProcessor(后处理Bean),执行postProcessBeforelnitialization
  6. 如果Bean实现InitializingBean 执行 afterPropertiesSet
  7. 调用<bean init-method="init">指定初始化方法init如果存在类实现BeanPostProcessor(处理Bean),执行postProcessAfterInitialization
  8. 执行业务处理
  9. 如果Bean实现DisposableBean 执行 destroy
  10. 调用<bean destroy-method="customerDestroy">指定销毁方法customerDestroy
  11. 调用<bean destroy-method="customerDestroy">指定销毁方法customerDestroy

    第五步和第八步重要 后处理Bean 增强用的 也就是代理模式

  • ·Spring的属性注入(XML方式)

    Spring的属性注入

    • -构造函数注入
      • 通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用。
        构造器注入在<constructor-arg>元素里声明的属性
    • -属性setter方法注入
      • 使用set方法注入,在Spring配置文件中,通过<property>设置注入的属性 如果有对象类型的值使用ref来注入
    • p命名空间
      • p:<属性名>="xxx”引入常量值
        p:<属性名>-ref="xxx"引用其它Bean对象
    • SpEL注入
      • ·SpEL:spring expression language,spring表达式语言,对依赖注入进行简化
        ·语法:#{表达式}
        ·<bean id=""value=“#{表达式}">
        SpEL表达式语言
        语法:#}
        #{‘hello'}:使用字符串
        #{topicld3}:使用另一个bean
        #{topicId4.content.toUpperCase0}:使用指定名属性,并使用方法
        #{T(java.lang.Math).P}:使用静态字段或方法
  • ·Spring的Bean管理(注解方式)

    • 在使用前在配置文件中的头改成
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启注解扫描================-->
    <context:component-scan base-package="com.windbag.demo1"/>
</beans>
    • ·Spring2.5引入使用注解去定义Bean
    • -@Component 描述Spring框架中Bean
    • ·除了@Component外,Spring提供了3个功能基本和@Component等效的注解
    • -@Repository 用于对DAO实现类进行标注
    • -@Service 用于对Service实现类进行标注
    • -@Controller 用于对Controller实现类进行标注
    • ·这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强
  • ·Spring的属性注入(注解方式)

    •  ·使用@Autowired 进行自动注入
    • ·@Autowired 默认按照类型进行注入
      • -如果存在两个相同Bean类型相同,则按照名称注入
    • ·@Autowired注入时可以针对成员变量或者set方法
    • ·通过@Autowired的required属性,设置一定要找到匹配的Bean
    • ·使用@Qualifier指定注入Bean的名称
    • ·使用Qualifier 指定Bean名称后,注解Bean必须指定相同名称
    • ·Spring提供对JSR-250中定义@Resource标准注解的支持
    • ·@Resource和@Autowired注解功能相似 但是要写name=“..”
  • 传统XML配置和注解配置混合使用

    • ·XML方式的优势(配置Bean)
    •       -结构清晰,易于阅读
    • ·注解方式的优势(注入属性)
    •       -开发便捷,属性注入方便·XML与注解的整合开发
    • -1、引入context命名空间
    • -2、在配置文件中添加context:annotation-config标签

 

原文地址:https://www.cnblogs.com/windbag7/p/9544089.html