欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Bean相关配置、作用范围、工厂的实例化方式、分模块配置

程序员文章站 2022-05-23 10:19:34
...

Bean相关配置

  • 名称与标识
    • id:使用了约束(唯一的)里面不能出现特殊字符(一般情况下使用id,因为具有唯一性)
    • name:无唯一性的约束
  • 对象的生命周期(实体类的生命周期)
    • init-method:Bean(工厂)开始创建的时候执行的方法
    • destory-method:Bean(工厂)销毁的时候执行的方法
    • 示例:
      <bean id="person" class="com.helong.demo2.Person" init-method="init" destroy-method="destroy">
              <property name="name" value="helong"/>
      </bean>
      
  • 注:
    • 加载配置文件即ClassPathXmlAppliactionContext(“配置文件的全路径”)的时候就会自动创建applicationContext.xml中的bean中已经设定了的类中的初始化方法。
    • 关闭工厂的方法:new ClassPathXmlAppliactionContext(“配置文件的全路径”).close();关闭工厂的时候就会调用创建的销毁对象的方法。

Bean的作用范围

  • scope属性:
    • singleton:默认,Spring会采用单例模式来创建这个对象(单例模式即多个创建ClassPathXmlAppliactionContext对象的时候,只会创建一个对象。即创建的所有对象均是同一个,地址均相同)
    • prototype:多例模式(即创建多个ClassPathXmlAppliactionContext的时候,就会创建多个对象,即创建的对象的地址不相同)

工厂的实例化方式

  • 默认构造方式

    <!--
    	id:为自己起的名字
    	class:类的全路径
    	init-method  对象创建时调用的方法
    	destroy-method 对象销毁时调用的方法
    	scope 使用范围 默认为singleton
    -->
    <bean id="userDao" class="com.helong.demo1.User"
    	init-method="init"
    	destroy-method="destory"
    	scope="prototype"
    >
         
    </bean>
    
    public class User{
    	private String name;
    	
    	public User(){
    	super();
    	System.out.println("执行了User的无参构造方法");
    	}
    	
    	public void init(){
    		System.out.println("User创建");
    	}
    	
    	public void destroy(){
    		System.out.println("User销毁");
    	}
    
    }
    
  • 静态工厂实例化

    <!--
    	id:为自己起的名字
    	class:类的全路径
    	init-method  对象创建时调用的方法
    	destroy-method 对象销毁时调用的方法
    	scope 使用范围 默认为singleton
    	factroy-method:指定静态方法的创建
    -->
    <bean id="userDao" class="com.helong.demo1.User"
    	init-method="init"
    	destroy-method="destory"
    	scope="prototype"
    	/*声明静态方法*
    	factroy-method="createUser"
    >
         
    </bean>
    
    public class User{
    	private String name;
    	
    	public User(){
    	super();
    	System.out.println("执行了User的无参构造方法");
    	}
    
    
    	/*注意使用是静态修饰的方法 并且返回的对象为配置文件中所对应实体类*/
    	public static User createUser(){
    		System.out.println("调用了createUser方法");
    		return new User ();
    	}
    
    
    
    	public void init(){
    		System.out.println("User创建");
    	}
    	
    	public void destroy(){
    		System.out.println("User销毁");
    	}
    
    }
    
  • 实例工厂实例化(一般不使用)

    <!--
    	id:为自己起的名字
    	class:类的全路径
    	init-method  对象创建时调用的方法
    	destroy-method 对象销毁时调用的方法
    	scope 使用范围 默认为singleton
    	factroy-method:指定静态方法的创建
    	 factroy-bean:指定其他bean的id名,这样就可以通过这个id访问到其所对应类的方法
    -->
     <bean id="user" class="com.helong.demo1.User" ></bean>
     <bean id="user2" class="com.helong.demo1.User"  factroy-bean="user"></bean>
    
    /*调用user2的时候就会自动的调用user所对应的方法*/
    Object user = applicationContext.getBean("user2");
    

Bean的分模块配置

  • 1).创建一个新的模块(新的applicationContext+n.xml文件)

  • 2).单独配置这个文件

      ```
      <?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 id="student" class="com.helong.demo4.Student">  
          </bean>
      </beans>
      ```
    
  • 3).加载配置文件

    • ①在classPathXmlContext(“中配置多个xml文件的全路径,用逗号分开”)
      ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext1.xml","applicationContext2.xml",......);
      
    • ②在主配置文件中导入其他文件的路径
      	 <!--导入另外配置文件的路径-->
          <import resource="applicationContext2.xml"/>
          <import resource="applicationContext3.xml"/>