Spring学习笔记二(Bean注入的几种方式)

1.前言

上一篇博客从宏观上讲解了一下Spring的知识,下面这篇来着重讲解一下有关Bean注入的几种方式。

2.Bean注入的几种方式

2.1 类构造器初始化

这也是默认的方式,在上一篇博客中也有所体现。直接在applicationContext.xml配置文件中,配置Bean标签即可

<span style="font-family:SimSun;font-size:18px;"><!-- 实例工厂初始化 -->
	<!-- 必须先创建实例工厂对应的Bean -->
	<bean id="Bean2Create" class="com.ioc.Bean2Create">
	</bean></span>

2.2 静态工厂初始化

工厂方法

<span style="font-family:SimSun;font-size:18px;">//静态工厂方法
public class Bean2Factory {
	//工厂方法
	public static Bean getBeanFactory(){
		return new Bean();
	}
}</span>

配置文件中配置

<span style="font-family:SimSun;font-size:18px;"><!-- 通过静态工厂进行注入,后面放置的是静态工厂的方法 -->
	<!-- class:静态工厂的类名 -->
	<!-- factory-method:静态工厂中用于创建对象的方法 -->
	<bean id="Bean2Factory" class="com.ioc.Bean2Factory" factory-method="getBeanFactory">
	</bean></span>

工厂获取Bean

<span style="font-family:SimSun;font-size:18px;">package com.junit;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ioc.Bean;
import com.ioc.Bean3;

public class Bean2FactoryTest {

	@Test
	public void test() {

		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过工厂进行获取Bean
		Bean bean=ctx.getBean("Bean2Factory", Bean.class);
		bean.test();

		/*通过实例工厂进行初始化*/
		Bean3 Bean3=ctx.getBean("Bean3", Bean3.class);
		Bean3.test();

	}

}
</span>

2.3 实例工厂获取

实例工厂与静态工厂很类似,只不过静态工厂采取的静态方法而已。主要区别在配置文件上。必须先实例化实例工厂,然后才可以实例化工厂创建的对象

<span style="font-family:SimSun;font-size:18px;">	<!-- 实例工厂初始化 -->
	<!-- 必须先创建实例工厂对应的Bean -->
	<bean id="Bean2Create" class="com.ioc.Bean2Create">
	</bean>

	<bean id="Bean3" factory-bean="Bean2Create" factory-method="getBean">
		<property name="Name" value="#{'123张是哪'}"/>
		<property name="country">
			<list>
				<value>"sdfsadf"</value>
				<value>"sdfsadf"</value>
				<value>"sdfsadf"</value>
				<value>"sdfsadf"</value>
				<value>"sdfsadf"</value>
			</list>
		</property>

		<property name="names">
			<set>
				<value>"sdfsadf"</value>
				<value>"54545"</value>
				<value>"sdfsadf"</value>
				<value>"sdfsadf"</value>
				<value>"sdfsadf"</value>
			</set>
		</property>
	</bean></span>

3.Bean的作用域和生命周期

3.1 作用域

Spring默认创建的对象是单例模式的对象

设置Bean的作用域,通过bean元素的scope属性完成

<beanid="bean4" class="cn.itcast.bean.xml.Bean1"
scope="prototype">

scope取值范围:

?    singleton:单例

?    prototype:非单例

?    Request:创建该Bean,并调用request.setAttribute(“beanId”,beanObj);

?    Session:创建该Bean,并调用request.getSession().setAttribute(“beanId”,beanObj);

?    globalSession:全局Session

分布式服务器

3.2 生命周期

Bean的初始化过程,已经被Spring完全包装完成,无法人工干预。但是Spring为我们预留了两个回调的方法。这也是Bean的两个生命周期的方法,可以在配置文件中进行定义。

<span style="font-family:SimSun;font-size:18px;"><bean id="bean5" class="cn.itcast.bean.xml.Bean1"
		init-method="init"
		destroy-method="destory">
	</bean>
</span>

或者也可以通过注解的形式进行定义:@PostConstruct和@PreDestroy

 4.属性和集合注入

4.1 属性注入

<span style="font-family:SimSun;font-size:18px;">   <!-- 构造器初始化 -->
   <!-- Bean的作用域,默认值为simple -->
	<bean id="userService" class="com.test.UserService" scope="prototype">
		<constructor-arg index="1" value="123"/>
		<constructor-arg index="0" value="女"/>
		<property name="id" value="123"/>
		<property name="name" value="xiaoming"/>
	</bean></span>

最常用的是属性注入

4.2  集合注入

常用的集合有list、数组、Set、Map、Properties等,注入的方式如下

<span style="font-family:SimSun;font-size:18px;"><!-- 集合注入 -->
	<bean id="bean10" class="cn.itcast.bean.xml.Bean10">
		<property name="country">
			<list>
				<value>中国</value>
				<value>美国</value>
				<value>韩国</value>
				<value>意大利</value>
			</list>
		</property>
		<property name="names">
			<set>
				<value>jock</value>
				<value>jockme</value>
				<value>zahc</value>
				<value>pkzahc</value>
			</set>
		</property>
		<property name="likes">
			<props>
				<prop key="BADU">百度</prop>
				<prop key="NQ">网秦</prop>
				<prop key="SINA">新浪</prop>
			</props>
		</property>
	</bean></span>

 5.注解开发

如果需要使用注解的话,需要在配置文件中定义类的加载,Spring通过XML格式,定义加入扫描的路径。

<span style="font-family:SimSun;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd
		">
	<!-- 开启自动扫描路径 ,含子包路径-->
	<context:component-scan base-package="cn.itcast"/>
</beans>

</span>

常用的注解标签

[email protected]、@Repository、@Service、@Controller,这三种的注解功能完全相同,仅仅是名称上的区别而已。

[email protected]:自动装配注入属性

@Qualifier:自动注入对象类型的属性

@Value:为属性注入的简单类型的值

@Resource:与@Autowired功能类似,自动注入Bean属性

@Scope:为当前Bean指定Scope参数

<span style="font-family:SimSun;font-size:18px;">package com.ioc;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("Bean4")
public class Bean4 {

	//自动注入值类型
	@Autowired
	@Value("haha")
	private String name;

/*	@Autowired()
	@Qualifier("Bean44")*/
	//自动注入引用类型
	@Resource(name="Bean44")
	private Bean5 bean5;
	public void test(){
		bean5.test();
		System.out.println("测试");
		System.out.println(name);
	}
}
</span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-30 04:21:45

Spring学习笔记二(Bean注入的几种方式)的相关文章

spring学习(02)之bean实例化的三种方式

bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构造器实例化: 这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现. 比如 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h

Spring学习笔记二

第四章 Spring与数据库 一. DataSource Spring提供了在Spring上下文配置数据源bean的多种方式包括 l 通过JDBC驱动程序定义的数据源 l 通过JNDI查找的数据源 l 连接池的数据源 1. 使用数据源连接池 DBCP(database conection pool)是一个不错的连接池选择. 其中的BasicDataSource的最常用的,因为它在Spring中易于配置.在Spring中可以使用以下代码来配置dbcp. <bean id="datasourc

Spring学习笔记——02 Bean的命名及实例化

一.Bean的命名 前一篇讲到IoC是一个管理Bean的容器,Bean多数情况下都是通过XML文件进行配置的,其中Bean的命名有以下几种方式,现在梳理一下. 1. 不指定id,只配置类名 <bean class="com.erving.HelloImpl"></bean> 若要调用该Bean,需要用以下语句: HelloApi helloApi = context.getBean(HelloApi.class); 2. 指定id,且id必须在IoC容器中唯一

Spring学习笔记2 - Bean

Bean是一个被实例化.组装,并通过Spring IoC容器所管理的对象. Bean定义的属性 属性 描述 class 这个属性是强制性的,并且制定用来创建bean的bean类 name 这个属性指定唯一的bean标识符.在基于XML的配置元数据中,可以使用ID和/或name属性来制定bean标识符 scope 指定由特定的bean定义创建的对象的作用域 constructor-arg 用来注入依赖关系 properties 用来注入依赖关系 autowiring mode 用来注入依赖关系 l

Spring学习笔记之bean配置

1.命名bean 每个bean都有一个或者多个的的标识符.这些标识符必须在加载他们的容器里边唯一.一个bean经常有且只有一个标识符,但是如果需要超过一个的名字,可以考虑额外的别名. 基于xml的配置源文件,你可以使用id或者name属性去指定bean的标识符,这里有个问题,如果是名字和ID的不一致,内部又是如何处理的? 如果你不想再另外再给他们定义一个别名,你可以指定name属性,利用逗号(,),分号(;)或者空格.spring3.1以前id属性是xsd:ID类型的,这个是唯一的,3.1以后,

Spring学习笔记之方法注入

public  abstract class ReplacedBean {protected static final Log log = LogFactory.getLog(ReplacedBean.class);       public void process() {               AnotherBean anotherBean = createAnotheBean();        anotherBean.doSth();           }    protecte

Spring学习笔记之Bean的实例化

一.bean的实例化方法有3种, 1.构造器实例化 2.静态工厂方法实例化 3.实例工厂方法实例化 二.用构造器来实例化 <bean id="ShunDao" class="test.FTPDAO"  > id或者name用于指定bean的名称,class用于指定bean的类型 三.静态工厂方法实例化 <bean id="ShunDao" class="test.FTPDAO" factory-method=

MyEclipse Spring 学习总结二 Bean的生命周期

文件结构可以参考上一节 Bean的生命周期有方法有:init-method,destroy-method ApplicationContext.xml 文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/

Spring学习笔记3 - Bean的生命周期

当一个bean被实例化时,它可能需要执行一些初始化使它转换成可用状态. 当bean不再需要,并且从容器中移除是,可能需要做一些清除工作. 为了定义安装和拆卸一个bean,我们只要声明带有init-method和/或destroy-method参数 init-method属性指定一个方法,在实例化bean时,立即调用该方法. destroy-method指定一个方法,只有从容器中移除bean之后,才能调用该方法. 示例: beans.xml <?xml version="1.0"