小白第六篇 Spring依赖注入与装配Bean

依赖注入

运行环境 Eclipse
Spring IoC容器的依赖注入分为三种:构造器注入,setter注入和接口注入。
Bean资源的配置在src目录下的spring-cfg.xml文件下配置,先进行基础配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
	<!-- Spring Bean 配置代码 -->
</beans>
  • 构造器注入(依赖构造方法的实现,其中Bean的构造方式可以是有参的也可以是无参的)
<!-- 对于一个A类 有一个构造函数 A(String ,String)的依赖注入-->
<bean id="对象名" class="类的全限定名">
	<constructor-arg index="0" value="第一个参数的值"/>
	<constructor-arg index="1" value="第二个参数的值"/>
</bean>
  • setter注入(利用JavaBean规范所定义的setter方法来完成注入,对于的Bean有一个无参的构造器,之后使用setter注入为其设置对应属性的值)
<!-- 对于构造函数 A()的依赖注入 setter注入的方式 假设A类含有两个属性 属性1和属性2-->
<bean id="对象名" class="类的全限定名">
	<property name="属性名1" value="属性1对应的值"/>
	<property name="属性名2" value="属性2对应的值"/>
</bean>
  • 接口注入(需要的资源来自于外界,例如在Tomcat中配置数据库连接资源,然后使用JNDI的形式去获取这个资源)
<!--在Eclipse配置后Tomcat生成的server项目中对于的tomcat有context.xml文件,在其中配置 -->
<Context>
		<Resource 
		  name="JNDI名字"
    	  auth="Container"
    	  type="javax.aql.DataSource"
    	  driverClassName="com.mysql.jdbc.Driver"
    	   url="jdbc:mysql://localhost:3306/数据库名?zeroTimeBehavior=convertToNull"
    	  username="root"
    	  password="123456"/>
   </Context>
<!--此时对于Eclipse是否自动将Tomcat的数据库驱动包复制到对应的lib文件下,如果没有,需要手动复制-->

<!-- Spring通过接口注入方式获取到Tomcat启动的数据库资源-->
<bean id="自定义资源名" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName">
		<value>java:comp/env/jdbc/ssm</value>
	</property>
</bean>

装配Bean

  • 通过XML进行装配
	<!-- 装配各种集合 -->
	<bean id="自定义id名" class="类的全限定名">
		<!-- 普通属性 -->
		<property name="id" value="1"/>
		<!-- 各类集合 -->
		<!-- 如果集合中是类的对象,对于类对象进行装配生成了对象之后,在集合中是需要通过<ref bean="定义的bean对象名“/>来引用的而不是<value>标签-->
		<!-- 需要注意的是对于Map集合<entry key-ref="键Bean对象名" value-ref="值Bean对象名"/> -->
		<property name="list">
			<list>
				<value>list1</value>
				<value>list2</value>
			</list>
		</property>
		<property name="map">
			<map>
				<entry key="key1" value="map1"/>
				<entry key="key2" value="map2"/>
			</map>
		</property>
		<property name="props">
			<props>
				<prop key="prop1">props1</prop>
				<prop key="prop1">props1</prop>
			</props>
		</property>
		<property name="set">
			<set>
				<value>set1</value>
				<value>set1</value>
			</set>
		</property>
		<property name="array">
			<array>
				<value>array1</value>
				<value>array2</value>
			</array>
		</property>
	</bean>
  • 通过注解装配(更多时候使用这个方法,使用多的是自动装配的方式但是需要注意歧义性)
//首先使用@Component注解使Spring IoC扫描生成Bean实例
//@Value代表的是值的注入
//@Primary 表示首要的,优先使用该类注入,防止歧义性问题
@Component(value="role")
@Primary
public class A {
	@Value("1")
	private Long id;
	@Value("value1")
	private String  value;
	@Value("value2")
	private String value2;
	//getter与setter方法省略
	...

/* 定义一个告诉Spring IoC去哪里扫描的类*/
package 包名需要与上面的POJO类的包名保持一致;

import org.springframework.context.annotation.ComponentScan;

@ComponentScan
public class PoJoConfig {
}

/*此时就可以生成容器了*/
public class AnnotationMain {
	public static void main(String[] args) {
		ApplicationContext context = 
				new AnnotationConfigApplicationContext(PoJoConfig.class);
		A a= context.getBean(A.class);
		System.out.println(a.getId());
	}
}


/*还有一种简单的是使用自动装配*/
//先定义一个接口
public interface AService{
	public void info();
}
//接口的实现类
public AServiceImpl implements AService{
	//@Autowired 表示自动装配
	//@Qualifier("AService") 表示按照AService的名字装配,消除歧义性
	@Autowired
	@Qualifier("AService")
	A a = null;
	//getter/setter方法
	@Overrid
	public void info(){
		...
	}
 }

/*还有一种@Bean的注解,可以注解到方法上将返回的对象作为Bean,但是不能注解到类上*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值