赞
踩
作用:
用于配置对象让spring来创建的。 默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。
属性:
id:给对象在容器中提供一个唯一标识。用于获取对象。 不能重复,否则报错。
name:name是bean的名称标识,在网上看到有的文章说name可以重复,但是我在Srping 4.0.4.RELEASE测试中,bean标签的name属性也是不能重复,且id和name属性也不能重复,name标签应该等同于id属性。
class:指定类的全限定类名(全类名=包+类)。用于反射创建对象。默认情况下调用无参构造函数。
scope:指定对象的作用范围。 * singleton :默认值,单例的. * prototype :多例的.
* request :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.
* session :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.
* global session :WEB项目中,应用在Portlet环境.如果没有Portlet环境那么globalSession相当于session.
init-method:指定类中的初始化方法名称。init-method属性是bean的初始方法,在创建好bean后调用该方法。
destroy-method:指定类中销毁方法名称。destory-method属性是bean的销毁方法,在销毁bean之前调用该方法,一般在该方法中释放资源。
factory-method:工厂方法属性,通过该属性,我们可以调用一个指定的静态工厂方法,创建bean实例。
- // 首先要创建生成bean的工厂类和方法
- public class BeanAttribute {
-
- public static void main(String[] args) {
- ApplicationContext act = new ClassPathXmlApplicationContext("BeanAttribute.xml");
- User user = (User) act.getBean("userFactory");
- System.out.println(user);
- }
- /**
- * 静态工厂方法生成user对象
- * @return
- */
- public static User createUser() {
- return new User();
- }
- }

- <%--然后创建bean实例--%>
- <bean id="userFactory" class="lzgsea.factory.BeanAttribute" factory-method="createUser"></bean>
上述代码就相当于:
User user = BeanAttribute.createUser();
factory-bean:就是生成bean的工厂对象,factory-bean属性和factory-method属性一起使用。
- // 首先要创建生成bean的工厂类和方法。
- public class UserFactory {
- // 生产user对象的工程方法
- public User createUser() {
- return new User();
- }
- }
- // 创建user对象,在java代码中我们这样写:
- UserFactory userFactory = new UserFactory();
- User user = userFactory.createUser();
如果要在Spring中创建User对象:首先在xml配置中配置UserFactory类和User类
- <!--在Spring中我们怎么写-->
- <!--首先在XML配置中配置UserFactory类和User类:-->
- <bean id="userFactory" class="lzgsea.factory.UserFactory"></bean>
- <bean id="user" factory-bean="userFactory" factory-method="createUser"></bean>
然后getBean获取User对象
- ApplicationContext act = new ClassPathXmlApplicationContext("BeanAttribute.xml");
- User user = (User) act.getBean("user");
- System.out.println(user);
单例对象:
scope="singleton" 一个应用只有一个对象的实例。它的作用范围就是整个引用。
生命周期:
对象出生:当应用加载,创建容器时,对象就被创建了。
对象活着:只要容器在,对象一直活着。
对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
多例对象:
scope="prototype" 每次访问对象时,都会重新创建对象实例。
生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要对象在使用中,就一直活着。
对象死亡:当对象长时间不用时,被java的垃圾回收器回收了。
(1)第一种方式:使用默认无参构造函数。在默认情况下: 它会根据默认无参构造函数来创建类对象。如果bean中没有默认无参构造函数,将会创建失败。
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"/>
(2)第二种方式:spring管理静态工厂-使用静态工厂的方法创建对象。
- /**
- * 模拟一个静态工厂,创建业务层实现类
- */
- public class StaticFactory {
- public static IAccountService createAccountService(){
- return new AccountServiceImpl();
- }
- }
然后在xml文件中
- <!-- 此种方式是:
- 使用StaticFactory类中的静态方法createAccountService创建对象,并存入spring容器 id属性:指定bean的id,用于从容器中获取 class属性:指定静态工厂的全限定类名 factory-method属性:指定生产对象的静态方法 -->
- <bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="createAccountService"></bean>
(3)第三种方式:spring管理实例工厂-使用实例工厂的方法创建对象.
- /**
- * 模拟一个实例工厂,创建业务层实现类
- * 此工厂创建对象,必须现有工厂实例对象,再调用方法
- */
- public class InstanceFactory {
- public IAccountService createAccountService(){
- return new AccountServiceImpl();
- }
- }
然后在xml文件中
- <!-- 此种方式是:
- 先把工厂的创建交给spring来管理。
- 然后在使用工厂的bean来调用里面的方法
- factory-bean属性:用于指定实例工厂bean的id。
- factory-method属性:用于指定实例工厂中创建对象的方法。
- -->
- <bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
- <bean id="accountService" factory-bean="instancFactory" factory-method="createAccountService"></bean>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。