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实例。

// 首先要创建生成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);

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

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

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

 实例化Bean的三种方式

(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>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值