• 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】


    Bean实例化的三种方式

    说明:通过配置文件创建对象就称为Bean实例化。

    第一种:使用类的无参构造创建(重点)

    实体类

     1 package com.tyzr.ioc;
     2 public class User {
     3     private String username;
     4     public User(String username) {
     5         super();
     6         this.username = username;
     7     }
     8     public User() {
     9     }
    10     public void add(){
    11         System.out.println("--------->add");
    12     }
    13     public static void main(String[] args) {
    14     //原始做法
    15        //User user = new User();
    16        //user.add();
    17     }
    18 }

    配置文件

    1 <!-- IOC入门 -->
    2 <bean id="user" class="com.tyzr.ioc.User"></bean>

    测试类

    1 @Test
    2     public void testUser(){
    3         //加载核心配置文件,创建对象
    4         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    5         //得到我们配置的对象
    6         //<bean id="user" class="com.tyzr.ioc.User"></bean>
    7         User user = (User)context.getBean("user");
    8         user.add();
    9     }

    问题:如果类里面没有无参构造方法会出现异常,如下:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.tyzr.ioc.User]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.tyzr.ioc.User.<init>(

    第二种:使用静态工厂创建

    创建静态的方法,返回类的对象。

    实体类

    1 package com.tyzr.bean;
    2 public class Bean2 {
    3     public void bean2(){
    4         System.out.println("bean2------------");
    5     }
    6 
    1 package com.tyzr.bean;
    2 public class Bean2Factory {
    3     //静态方法返回bean2
    4     public static Bean2 getBean2(){
    5         return new Bean2();
    6     }
    7 }

    配置文件

    1 <!-- 使用静态工厂创建对象 -->
    2 <bean id="bean2" class="com.tyzr.bean.Bean2Factory" factory-method="getBean2"></bean>

    测试类

    1 @Test
    2     public void testBean2(){
    3         //加载核心配置文件,创建对象
    4         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    5         //得到我们配置的对象
    6         //<bean id="bean2" class="com.tyzr.bean.Bean2Factory" factory-method="getBean2"></bean>
    7         Bean2 bean2 = (Bean2)context.getBean("bean2");
    8         bean2.bean2();    
    9     }

    第三种:使用实例工厂创建

    创建不是静态的方法,返回类的对象。

    实体类

    1 package com.tyzr.bean;
    2 public class Bean3 {
    3     public void bean3(){
    4         System.out.println("bean3------------");
    5     }
    6 }
    1 public class Bean3Factory {
    2     //普通方法返回bean3
    3     public Bean3 getBean3(){
    4         return new Bean3();
    5     }
    6 }

    配置文件

    1 <!-- 实例工厂创建对象 -->
    2         <!-- 因为工厂里面的方法不是静态的,所以工厂本身也得创建对象 -->
    3         <bean id="bean3Factory" class="com.tyzr.bean.Bean3Factory"></bean>
    4         <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>

    测试类

     1 @Test
     2     public void testBean3(){
     3         //加载核心配置文件,创建对象
     4         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
     5         //得到我们配置的对象
     6         //<!-- 实例工厂创建对象 -->
     7         //<!-- 因为工厂里面的方法不是静态的,所以工厂本身也得创建对象 -->
     8         //<bean id="bean3Factory" class="com.tyzr.bean.Bean3Factory"></bean>
     9         //<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
    10         Bean3 bean3 = (Bean3)context.getBean("bean3");
    11         bean3.bean3();
    12     }
  • 相关阅读:
    c++11——列表初始化
    flask学习(十二):for循环遍历
    flask学习(十一):if判断语句
    flask学习(十):模板中访问模型和字典的属性
    flask学习(九):模板渲染和参数传递
    flask学习(八):页面跳转和重定向
    flask学习(七):URL反转
    flask学习(六):URL传参
    flask学习(五):使用配置文件
    flask学习(四):debug模式
  • 原文地址:https://www.cnblogs.com/angelye/p/7383852.html
Copyright © 2020-2023  润新知