当前位置:   article > 正文

Spring中的基本知识_spring什么时候调用构造方法

spring什么时候调用构造方法

bean标签:

作用:

用于配置对象让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实例。

  1. // 首先要创建生成bean的工厂类和方法
  2. public class BeanAttribute {
  3. public static void main(String[] args) {
  4. ApplicationContext act = new ClassPathXmlApplicationContext("BeanAttribute.xml");
  5. User user = (User) act.getBean("userFactory");
  6. System.out.println(user);
  7. }
  8. /**
  9. * 静态工厂方法生成user对象
  10. * @return
  11. */
  12. public static User createUser() {
  13. return new User();
  14. }
  15. }
  1. <%--然后创建bean实例--%>
  2. <bean id="userFactory" class="lzgsea.factory.BeanAttribute" factory-method="createUser"></bean>

 上述代码就相当于:

User user = BeanAttribute.createUser();

factory-bean:就是生成bean的工厂对象,factory-bean属性和factory-method属性一起使用。

  1. // 首先要创建生成bean的工厂类和方法。
  2. public class UserFactory {
  3. // 生产user对象的工程方法
  4. public User createUser() {
  5. return new User();
  6. }
  7. }
  8. // 创建user对象,在java代码中我们这样写:
  9. UserFactory userFactory = new UserFactory();
  10. User user = userFactory.createUser();

如果要在Spring中创建User对象:首先在xml配置中配置UserFactory类和User类

  1. <!--在Spring中我们怎么写-->
  2. <!--首先在XML配置中配置UserFactory类和User类:-->
  3. <bean id="userFactory" class="lzgsea.factory.UserFactory"></bean>
  4. <bean id="user" factory-bean="userFactory" factory-method="createUser"></bean>

然后getBean获取User对象

  1. ApplicationContext act = new ClassPathXmlApplicationContext("BeanAttribute.xml");
  2. User user = (User) act.getBean("user");
  3. System.out.println(user);

bean的作用范围和生命周期:

单例对象:
scope="singleton" 一个应用只有一个对象的实例。它的作用范围就是整个引用。
生命周期:
对象出生:当应用加载,创建容器时,对象就被创建了。
对象活着:只要容器在,对象一直活着。
对象死亡:当应用卸载,销毁容器时,对象就被销毁了。

多例对象:
scope="prototype" 每次访问对象时,都会重新创建对象实例。
生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要对象在使用中,就一直活着。
对象死亡:当对象长时间不用时,被java的垃圾回收器回收了。

 实例化Bean的三种方式

(1)第一种方式:使用默认无参构造函数。在默认情况下: 它会根据默认无参构造函数来创建类对象。如果bean中没有默认无参构造函数,将会创建失败。

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"/>

(2)第二种方式:spring管理静态工厂-使用静态工厂的方法创建对象。

  1. /**
  2. * 模拟一个静态工厂,创建业务层实现类
  3. */
  4. public class StaticFactory {
  5. public static IAccountService createAccountService(){
  6. return new AccountServiceImpl();
  7. }
  8. }

然后在xml文件中

  1. <!-- 此种方式是:
  2. 使用StaticFactory类中的静态方法createAccountService创建对象,并存入spring容器 id属性:指定bean的id,用于从容器中获取 class属性:指定静态工厂的全限定类名 factory-method属性:指定生产对象的静态方法 -->
  3. <bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="createAccountService"></bean>

(3)第三种方式:spring管理实例工厂-使用实例工厂的方法创建对象.

  1. /**
  2. * 模拟一个实例工厂,创建业务层实现类
  3. * 此工厂创建对象,必须现有工厂实例对象,再调用方法
  4. */
  5. public class InstanceFactory {
  6. public IAccountService createAccountService(){
  7. return new AccountServiceImpl();
  8. }
  9. }

然后在xml文件中

  1. <!-- 此种方式是:
  2. 先把工厂的创建交给spring来管理。
  3. 然后在使用工厂的bean来调用里面的方法
  4. factory-bean属性:用于指定实例工厂bean的id。
  5. factory-method属性:用于指定实例工厂中创建对象的方法。
  6. -->
  7. <bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
  8. <bean id="accountService" factory-bean="instancFactory" factory-method="createAccountService"></bean>

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/41548
推荐阅读
相关标签
  

闽ICP备14008679号