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"/>
- ①在classPathXmlContext(“中配置多个xml文件的全路径,用逗号分开”)