在Spring中对Bean属性赋值的过程我们称之为(值的注入)依赖注入.Spring应用中为Bean的属性注入值的方式有两种,set注入和构造注入,set注入式通过对象的set方法为对象属性赋值,构造注入为通过bean对象的构造方法为属性注入值。
Spring 直接量值的注入:指的是通过Spring IOC为对象的8种基本数据类型,8种基本数据类型对应的封装类以及String类型,日期类型的属性注入值。
反射让不可访问的方法变成可被访问的
private OpenDataSource() {
System.out.println("OpenDataSource.OpenDataSource()");
}
构造方法可以私有
package utils;
/**
* 模拟数据源对象
* @author Administrator
*javax.sql.DataSource
*模拟写一个开源的连接池
*如何将此对象交给Spring管理
*1)以xml的方式对此对象进行描述(在配置文件中以<bean>标签描述)
*2)以注解的方式对此对象进行描述
*/
public class OpenDataSource {
private String driverClassName;
private String url;
private String userName;
private String password;
//为属性赋值的过程叫值的注入,也叫依赖注入,通过调用对象的set方法赋值
public OpenDataSource() {
System.out.println("OpenDataSource.OpenDataSource()");
}
public void init(){
System.out.println("OpenDataSource.init()");
}
public void close(){
System.out.println("OpenDataSource.destory()");
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "OpenDataSource [driverClassName=" + driverClassName + ", url=" + url + ", userName=" + userName
+ ", password=" + password + "]";
}
}
<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"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.3.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!--如何理解spring中的Bean对象:由spring框架管理的所有对象都是bean对象 -->
<!-- Bean对象何时创建?要看对象是否配置延迟加载 -->
<!-- Bean对象的默认作用域singleton(默认在内存中只有一份) -->
<!-- 单例对象是何时销毁的?容器关闭时销毁 -->
<bean id="openDataSource"
class="utils.OpenDataSource"
init-method="init"
destroy-method="close"
lazy-init="false"
scope="singleton">
<!-- 系统底层创建对象后对调用property元素中name属性值,即对象的set方法为属性赋值-->
<property name="DriverClassName" value="com.mysql.jdbc.driver"></property>
<property name="Url" value="jdbc:///test"></property>
<property name="UserName" value="root"></property>
<property name="Password" value="123456"></property>
</bean>
</beans>
package test;
import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestBase {
protected ClassPathXmlApplicationContext ctx;
@Before
public void init(){
ctx=new ClassPathXmlApplicationContext("spring-configs.xml");
}
@After
public void close(){
ctx.close();
}
}
package test;
import org.junit.Assert;
import org.junit.Test;
import utils.OpenDataSource;
public class TestDataSource01 extends TestBase{
@Test
public void testOpenDataSource(){
//获取bean对象
OpenDataSource ds = ctx.getBean(OpenDataSource.class);
//测试对象值是否为空
Assert.assertNotEquals(null, ds);
System.out.println(ds);
}
}