spring的依赖注入

1.构造器的注入:

    构造器属性注入 一般不使用,有太多的弊端,参数的注入太麻烦,还有顺序要求,一旦几个参数与构造器传入的参数顺序 不 一 样就会报错,避免这种情况,需要加入index=“传入参数的顺序”,这种方式也是不可取的,多少个参数要定义多少个index

java代码Bean类:

public class Bean6 {
	private String name;
	private Integer age;
	
	public Bean6(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public void fn() {
		System.out.println("fn6+.."+name +age);

	}

xml代码:

<bean id="bean6" class="com.array.ioc.bean.xml.di.Bean6">
	<constructor-arg type="java.lang.String" index="0" value="array"></constructor-arg>
	<constructor-arg type="java.lang.Integer" index="1" value="5"></constructor-arg>
</bean>

测试代码:

ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext1.xml");
Bean6 bean6 = (Bean6) act.getBean("bean6"); 
bean6.fn();

2.setter注入

java代码Bean类:

public class Bean7 {
	private String name;
	private int age;
	private Bean8 bean8;
	
	public void setBean8(Bean8 bean8) {
		this.bean8 = bean8;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void fn() {
		System.out.println("bean7 " +name +age+bean8);
		
	}
	
}

xml代码:

<!-- setter注入 -->
	<bean id="bean7"
		class="com.array.ioc.bean.xml.di.Bean7"
	>
		<!--如果注入的是String,Integer基本包装类型直接用value赋值  -->
		<property name="name" value="array7"></property>
		<property name="age" value="8"/>
		<!--引用数据类型注入  -->
		<property name="bean8" ref="bean8"></property>
	</bean>
	<bean class="com.array.ioc.bean.xml.di.Bean8" id="bean8"></bean>

测试代码:

ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext1.xml");
Bean7 bean7 = (Bean7) act.getBean("bean7"); 
bean7.fn();

3.EL表达式注入

java代码Bean类:

这里同上使用的是Bean7

xml代码:

<!-- el表达式注入方式 -->
	<bean>
		<property name="name" value="#{'array2'}"></property>
		<property name="age" value="#{55}"></property>
		<property name="bean8" value="#{bean8}"></property>
		
	</bean>
	<bean class="com.array.ioc.bean.xml.di.Bean8" id="bean8"></bean>


测试代码:

同上setter注入

4集合注入:

java代码Bean类:

public class Bean9 {
	//数组
	private int[] intarr;
	private List<String> list;
	private HashMap<String,User> map;
	private User user;
	private User user1;
	private Properties prop1;
	
	public void setProp1(Properties prop1) {
		this.prop1 = prop1;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public void setUser1(User user1) {
		this.user1 = user1;
	}

	public void setIntarr(int[] intarr) {
		this.intarr = intarr;
	}
	
	public void setList(List<String> list) {
		this.list = list;
	}
	
	public void setMap(HashMap<String, User> map) {
		this.map = map;
	}

	public void fn() {
		System.out.println("bean9"+intarr+list.get(1)+map.get("user")+user);
		System.out.println(user);
	}
}

xml代码:

<!--数组与集合的注入类似  -->
	<bean class="com.array.ioc.bean.xml.list.Bean9" id="bean9">
		<!-- 数组注入 -->
		<property name="intarr">
			<array>
				<value>11</value>
				<value>12</value>
				<value>14</value>
				<value>15</value>
			</array>
		</property>
		<!-- 集合注入 -->
		<property name="list">
			<list>
				<value>array</value>
				<value>object</value>
				<value>keke</value>
			</list>
		</property>
		<!-- map注入 -->
		
		<property name="map">
			<map>//map中的value是实体类
				<entry key="1" value-ref="user1"></entry>
				<entry key="2" value-ref="user"></entry>
//map中的value是简单的基础数据类型的两种设置方法
				<!-- <entry>
					<key>
						<value>1</value>
					</key>
					<value>array</value>
				</entry> -->
				<!-- <entry key="" value=""></entry> -->
			</map>
		</property>
		
	</bean>
	<bean id="user" class="com.array.ioc.bean.xml.list.User">
		<property name="username" value="haha"></property>
		<property name="password" value="1212"></property>
	</bean>
	<bean id="user1" class="com.array.ioc.bean.xml.list.User">
		<property name="username" value="zs"></property>
		<property name="password" value="123"></property>
	</bean>
	
	

测试代码:

ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext3.xml");
Bean9 bean9 = (Bean9) act.getBean("bean9"); 
bean9.fn();

properties注入:

<!--注入properties  -->
<property name="props">
	<props>
		<prop key="key1">hahah</prop>
		<prop key="key2">wwww</prop>
	</props>
</property>

5.注解注入:

    (1)需要xml文件

            3个相互注入的java类:

            

//这里@Component/@Controller("userAction")是同一个意思
//可以不用定义bean的名字默认是类名首字母小写
//@Controller("userAction")
@Component

public class UserAction {
	//注解注入不需要setter方法
	public void fn() {
		// TODO 自动生成的方法存根
		System.out.println("userAction");
	}
}
@Repository
//@Component
public class UserDao {
//	@Autowired(required=false)//required=true必须注值否则报错
//	@Qualifier("userAction")
	//与上面两句注解是同样的效果
	
	@Resource(name="userAction")
	private UserAction userAction;
	public void fn() {
		// TODO 自动生成的方法存根
		System.out.println("userDao");
		userAction.fn();
	}
}

//@Component
@Service("userService")@Scope("prototype")
public class UserService {
	@Autowired(required=false)
	@Value("array")
	private String name;
	@Autowired(required=false)//required=true必须注值否则报错
	@Qualifier("userDao")
	private UserDao userDao;
	public void fn() {
		// TODO 自动生成的方法存根
		System.out.println("userService"+name);
		userDao.fn();
	}
	@PostConstruct
	public void init() {
		System.out.println("init");
	}
	@PreDestroy
	public void destroy() {
		System.out.println("destroy");
	}
}

xml代码:进行扫包

<!--开起注解式的支持  -->
<context:component-scan base-package="com.array.ioc.annotation"/>
	

测试类:与junit相结合:

//设置运行类使用spring整合Junit的专用运行类
@RunWith(SpringJUnit4ClassRunner.class)//将当前类变成了bean
//设置spring环境对应的配置文件
@ContextConfiguration(locations="classpath:/application.xml")
public class JunitTest {
	//将被测试对象最为资源注入到当前类中
	@Autowired
	@Qualifier("aa")
	private UserService service;
	@Test
	public void test() {
		service.fn();
	}
}

(2)不需要xml配置文件的注入:


使用上面的三个Bean类

新建一个类注入bean:

@Configuration
//表示该文件加入扫描
public class BeanConfig {
	@Bean(name="aa")
	public static UserService getInst() {
		System.out.println("getInst");
		return new UserService();
	}
}
测试代码
//免配置文件
	AnnotationConfigApplicationContext act = new AnnotationConfigApplicationContext();
	//将所有的注解加入道配置
	act.register(BeanConfig.class);
	act.register(UserService.class);
	act.register(UserDao.class);
	act.register(UserAction.class);
	//注册完毕后刷新配置
	act.refresh();
	System.out.println(act.getBean("aa"));




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值