【SSM】Spring的Bean管理

目录

一、Spring的Bean管理(XML)方式

二、Spring的Bean管理(注解)方式

三、Spring容器中Bean的生命周期

 四、XML与注解方式的混合使用


一、Spring的Bean管理(XML)方式

         有三种方式:使用类的构造器方式(默认为无参)

                               使用静态工厂方法实例化(简单工厂模式)

                               使用实例工厂方法实例化(工厂方法模式)

 ①:使用类的构造器方式

        首先创建一个Bean1类

public class Bean1 {
    public Bean1(){
        System.out.println("Bean1被实例化!");
    }
}

        在配置文件中添加该类

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- Bean实例化的三种方式 -->
    <!-- 第一种,无参构造器模式 -->
    <bean id="bean1" class="com.xyz.ioc.demo02.Bean1">

    </bean>
</beans>

        测试:运行下面代码就会看到控制台输出“Bean1被实例化!”,表明调用了Bean1的构造方法。

public class test {
   @Test
    private void demo1(){
        //创建工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext
                ("applicationContext.xml");
        Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");

    }
}

  ②: 使用静态工厂方法实例化(简单工厂模式)

          首先创建Bean2对象类

public class Bean2 {
    
}

          为Bean2提供一个静态工厂

public class Bean2Factory {
    public static Bean2 createBean2(){
        System.out.println("执行了BeanFactory方法");
        return new Bean2();
    }
}

        在配置文件中添加

【SSM】Spring的Bean管理

        测试

    @Test
    public void demo02(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext
                            ("applicationContext.xml");
        Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");
    }

       ⑤ :使用实例工厂方法实例化(工厂方法模式)

          首先创建Bean3对象类

public class Bean3 {
    
}

          为Bean2提供一个实例工厂

public class Bean3Factory {
    public Bean3 createBean3(){
        System.out.println("Bean3的工厂被执行了");
        return new Bean3();
    }
}

        在配置文件中添加


    <bean id="bean3Factory" class="com.xyz.bean.Bean3Factory"/>
    <bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"/>

        测试

    @Test
    public void demo03(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext
                ("applicationContext.xml");
        Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
    }

总结:静态工厂和实例工厂最大的区别就是创建实例的方法是否式静态的

           由于实例工厂的创建实例方法不是静态的,所以在配置文件中先要获取工厂的实例才能去创建对象

2.Bean标签的常用配置

       id和name属性:都是用来给每个Bean取一个别名,区别是name支持特殊字符。

       class:用于设置一个类的完全路径名称,主要作用是IOC容器生成类的实例

       scope:该属性用于决定Bean的作用域,默认为singleton单例模式

【SSM】Spring的Bean管理

       init-method:当类被初始化时会调用该方法

       destroy-method:当类被销毁时会调用该方法

二、Spring的Bean管理(注解)方式

1.注解方式创建Bean     

首先要修改配置文件,相对于上面XML方式,注解方式需要在配置文件导入注解的约束

          使用<context/>标签用于扫描制定的包

<?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.xyz.bean"/>

</beans>

 创建一个UserService类(在类上使用@Component注解,括号里的"userService"相当于XML中<Bean/>的id)

@Component("userService")
public class UserService {
    public void sayHello(String name){
        System.out.println("Hello"+name);
    }
}

测试

   @Test
    public void demo(){
        ApplicationContext applicationContext = new 
    ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.sayHello("张三");
    }

可以发现注解方式比XML方式简便很多,Spring除了@Component外,还提供了3个功能基本和@Component等效的注解

@Repository 用于对DAO实现类进行标注

@Service 用于对Service实现类进行标注

@Controller 用于对Controller实现类进行标注 

2.其他注解

@PostConstruct:在初始化前会调用该注解标记的方法

@PreDestory:在销毁前会调用该注解标记的方法

@Scope:用于指定Bean的作用范围

三、Spring容器中Bean的生命周期

【SSM】Spring的Bean管理

 

 

 四、XML与注解方式的混合使用

XML优势:结构清晰、易于阅读

注解优势:开发便捷、属性注入方便

由于XML和注解各有各的优势,所以一般开发中使用XML方式管理类、注解方式进行属性注入