Spring-依赖注入简介与xml配置

spring核心是依赖注入。本质就是通过配置xml文件或注解来自动生成你需要的对象,放在spring的大容器中。
spring是一个独立的框架,既可以用在java SE项目中,也可以用在 Web项目中。程序先创建bean容器,再调用bean容器的getBean()方法来获取Spring容器中的bean。

1.获得

1.1 spring 依赖

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>

会得到多个依赖的jar,见下图。

图1-1 spring的依赖jar

1.2 我的demo

简单的spring使用范例,项目地址: https://code.csdn.net/chuchus/springdemo/tree/master

2.生成bean

这里的bean类似于JavaBean,但范围要宽的很多。spring就像一个大容器,帮我们创建好对象后放入了它的容器。所有由它创建的对象,都叫bean。

bean的作用域:
singleton
每次调用getBean(),都返回同一个对象;
prototype
每次调用getBean(),都返回新的对象;
request 针对每次HTTP请求,Web应用中才有效。

2.1 BeanFactory

org.springframework.beans.factory.BeanFactory
接口。它是一个容器,spring生成的bean存放在它的实现类中。主要有下面几个方法。
Object org.springframework.beans.factory.BeanFactory.getBean(String name)

根据名字拿到bean对象。

<T> T org.springframework.beans.factory.BeanFactory.getBean(String name, Class<T> requiredType) 

getbean()的重载。

org.springframework.context.ApplicationContext

接口,,BeanFactory的子接口。

生成ApplicationContext的构造函数有:

FileSystemXmlApplicationContext 从当前项目位置算起,即src/目录的上层目录。
ClassPathXmlApplicationContext 从classes/开始算起。例子:

图2-1 bean配置文件的位置

ApplicationContext ctx =new ClassPathXmlApplicationContext("com/likeyichu/aop/beans.xml");

2.2 xml读properties配置

可以让spring读取我们的.properties文件。例子见下,注意用到的是org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://115.28.88.166:3306/AliyunDB
jdbc.username=root3

占位

<bean id="jdbc"
	class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="locations" value="/WEB-INF/jdbc.properties" />
</bean>
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
	destroy-method="close">
	<property name="driverClassName" value="${jdbc.driverClassName}" />
	<property name="url" value="${jdbc.url}" />
</bean>

2.3初始化和销毁bean

当实例化一个bean时,可能需要执行一些初始化操作来确保该bean处于可用状态;同样地,当不再需要bean,将其从容器中移除时,我们还可能按顺序执行一些清除工作。此时我们需要init-method与destroy-method属性。

public class Stage{
	public void turnOnLight(){
	}
	public void turnOffLight(){
	}
}
<bean id="stage" class="com.likeyichu.Stage" init-method="turnOnLight" destroy-method="turnOfflight" />

2.4装配集合

<bean id="book" class="com.likeyichu.sample.Book">
	<property name="bookList">
		<list>
			<ref bean="bean1"/>
			<ref bean="bean2"/>
		</list>
	</property>
	<property name="bookSet">
		<set>
			<ref bean="bean1"/>
			<ref bean="bean2"/>
		</set>
	</property>
	<property name="bookMap">
		<map>
			<entry key="book1" value-ref="bean1"/>
			<entry key="book2" value-ref="bean2"/>
		</map>
	</property>
</bean>

3.注入bean

两种注入
设值注入:通过<property .../>元素驱动spring执行setter方法。
构造注入:通过<constructor-arg.../> 元素驱动Spring执行带参数的构造函数。

需要在bean类中实现所有private字段的setter方法。下面是示例spring配置。

<!-- 注入bean属性-->
<bean id="obj1" class="com.likeyichu.sample.Sample1" >
	<property name="field1" value="value1" /><!-- 无论字段属于哪种基本数据类型,value="都需要加引号"-->
	<property name="field2" value="value2" />
</bean>
<bean id="obj2" class="com.likeyichu.sample.Sample2" >
	<property name="field1" ref="obj1" /> <!--属性注入,引用其他bean-->
</bean>

<!-- 注入bean构造函数-->
<bean id="obj3" class="com.likeyichu.sample.Sample3">
	<constructor-arg value="123"/><!--第一个形参-->
	<constructor-arg ref="obj1"/>
	<constructor-arg ref="obj2"/>
</bean>

<!--对于只在一个地方引用到的bean,可以直接定义,免去ref-->
<bean id="mdbCacheManager" class="com.taobao.qd.common.cache.impl.DefaultCacheManager">
		<property name="namespace" value="62" />
		<property name="tairManager">
			<!--对于只在一个地方引用到的bean,可以直接定义,免去ref-->
			<bean class="com.taobao.tair.impl.mc.MultiClusterTairManager"
				init-method="init">
				<property name="configID">
					<value>mdbcomm-daily</value>
				</property>
			</bean>
		</property>
</bean>

4.自动装配

为了简化xml配置,spring提供了四种自动装配机制。

byName:把与bean的属性同名的其他bean,自动装配到对应属性中;若找不到,不装配。

byType:把与bean的属性同类型的其他bean,自动装配到对应属性中;若找不到,不装配。

constructor :把与bean的构造函数形参同类型的其他bean,自动装配到对应属性中;若找不到,不装配。

autodetect:尝试constructor装配,若失败,采用byType装配。

5.高级xml特性

 <!-- 配置文件模块化分为多个,靠import标签引入-->
 <import resource="biz/common.xml" />

 <!--<ref local="gradeBean" />等同于<ref bean="gradeBean" /> 。前者限定在当前文件中查找,减少冲突与出错几率-->
<bean id="uicExtraReadServiceClient" class="com.yichudu.Student">
	<property name="grade">
		<ref local="gradeBean" />
	</property>
</bean>
<bean id="gradeBean" class="com.yichudu.Grade">
时间: 2024-10-27 01:47:11

Spring-依赖注入简介与xml配置的相关文章

spring 依赖注入的困惑 关于子类和父类

问题描述 spring 依赖注入的困惑 关于子类和父类 有一个Son类 package cn.extend; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; public class Son extends Father { } 还有一个父类Father

spring依赖注入测试时出错

问题描述 spring依赖注入测试时出错 错误如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'analysisService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationExcepti

java框架spring依赖注入的6种方式

spring中如何给对象的属性复制? 1)通过构造方法2)通过set方法给属性注入值3)p命名空间4)自动转配(了解即可,不推荐使用)5)注解6)通过接口 准备工作(模拟业务方法)Action-->service-->dao 1)UserDao:     p<span style="font-family:Courier New;">ublic class UserDao {           public void save(){              

关于繁星类的spring注入问题,xml配置非注解

问题描述 自已定义了一个基类如下:publicclassBaseDaoImpl<T>implementsBaseDao<T>{privateSqlSessionTemplatesqlSessionTemplate;publicSqlSessionTemplategetSqlSessionTemplate(){returnsqlSessionTemplate;}publicvoidsetSqlSessionTemplate(SqlSessionTemplatesqlSessionTe

Spring中bean的基本xml配置

xml   在spring容器内拼凑bean叫作装配.装配bean的时候,你是在告诉容器,需要哪些bean,以及容器如何使用依赖注入将它们配合在一起.    理论上,bean装配可以从任何资源获得,包括属性文件,关系数据库等,但xml是最常见的spring 应用系统配置源.Spring中的几种容器都支持使用xml装配bean,包括:    XmlBeanFactory ,    ClassPathXmlApplicationContext ,    FileSystemXmlApplicatio

Spring 依赖注入方式详解

阅读目录 1.Set注入 2.构造器注入 3.静态工厂的方法注入 4.实例工厂的方法注入 5.总结    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我

JavaWeb Spring依赖注入深入学习_java

一.依赖注入(DI) 依赖注入听起来很高深的样子,其实白话就是:给属性赋值.一共有两种方法,第一是以构造器参数的形式,另外一种就是以setting方法的形式. 1 构造器注入 1 使用构造器注入 使用xml的注入方式 A. 通过参数的顺序 <constructor-arg index="0"><value>张三</value></constructor-arg> <constructor-arg index="1"

Spring依赖注入的两种方式(根据实例详解)

1,Set注入    2,构造注入 Set方法注入: 原理:通过类的setter方法完成依赖关系的设置 name属性的取值依setter方法名而定,要求这个类里面这个对应的属性必须有setter方法. Set方法注入时spring中配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans&qu

Spring使用AspectJ注解和XML配置实现AOP_java

本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project 首先是位于classpath下的applicationContext.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmln