Spring之注解配置代码示例二

简介

<context:component-scan>元素还会自动注册AutowireAnnotationBeanPostProcessor实例,该实例
可以自动装配具有@Autowired和@Resource、@Inject注解的属性,这三个注解的功能类似
@Resource注解要求提供一个Bean名称的属性,若该属性为空,则自动采用标注处的变量或方法
名作为Bean的名称;@Inject和@Autowired注解一样,也是按类型匹配注入Bean,但没有required属性
@Autowired注解自动装配具有兼容类型的单个Bean属性
---构造器,普通字段(即使是非public),一切具有参数的方法都可以应用@Autowired注解
---默认情况下,所有使用@Autowired注解的属性都需要被设置。当Spring找不到匹配的Bean
装配属性时,会抛出异常,若某一属性运行不被设置,可以设置@Autowired注解的required属
性为dalse。
例如
@Autowired(required=false)
private UserController userController;
这时就算IOC容器中没有UserController实例也没关系
---默认情况下,当IOC容器里存在多个类型兼容的Bean时,通过类型的自动装配将无法工作,此时
可以在@Qualifier注解里提供Bean的名称。Spring允许对方法的入参标注@Qualifier已指定注入Bean的名称
例如
@Autowired
@Qualifier(“userController”)
private UserController userController;
或者
@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
	this.userDao = userDao;
}	
---@Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的Bean进行自动装配。
---@Autowired注解也可以应用在集合属性上,此时Spring读取该集合类型信息,然后自动装配所有与之兼容的Bean。
---@Autowired注解用在java.util.Map上时,若该Map的键值为String,那么Spring将自动装配与之Map值类型
兼容的Bean,此时Bean的名称作为键值。

代码示例一

UserDao.java
package com.lanou3g.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
	public void test() {
		System.out.println("userDao...");
	}
}
UserServiceImpl.java
package com.lanou3g.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.lanou3g.dao.UserDao;
@Service("userService")
public class UserServiceImpl {
	private UserDao userDao;
	@Autowired
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}	
	public void test(){
		userDao.test();
		System.out.println("userService...");
	}
}
UserController.java
package com.lanou3g.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.lanou3g.service.UserServiceImpl;
@Controller
public class UserController {
	@Autowired
	private UserServiceImpl userServiceImpl;
	
	public void test(){
		userServiceImpl.test();
		System.out.println("userController...");
	}
}
Test.java
package com.lanou3g.controller;

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

import com.lanou3g.dao.UserDao;
import com.lanou3g.service.UserServiceImpl;

public class Test {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-user.xml");		
		UserController userController = (UserController)ctx.getBean("userController");
		System.out.println(userController);
		userController.test();
	}
}
运行结果
信息: Loading XML bean definitions from class path resource [bean-user.xml]
com.lanou3g.controller.UserController@69a10787
userDao...
userService...
userController...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值