二 IOC之注解的方式

    好开森,今天终于看到利用注解的方式来实现依赖注入了,嘿嘿。
java

    主要记录一下@Request , @Autowried及@Qualifier的用法。因为这里的一些文章都是与以前写的一些小要点有关,并且是依托于同一个开源的项目,因此,一些重复出现的代码配置啥的,就再也不贴出来了。spring

    固然,首先咱们得在配置文件里加一句简单的context配置,以下所示:app

<context:annotation-config/>

    因为用到了context包中的标签,因此引入对应的标签订义文件是必须的。具体以下所示:
单元测试

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 这句很重要哟! -->
	<context:annotation-config/>
	<!--相关配置 -->
</beans>

    下面正式开始介绍上面提到的三个注解。
测试

    @Request
ui

    一个用来检查的注解,检查属性是否已经设置。这样,在配置里若是这个被注解的属性没有配置,将会抛出BeanCreationException异常,俺也不知道这个注解好很差用,呵呵。this

    亮代码及配置
spa

    1.UserDao类代码:
.net

public class UserDao {
	private User user;
	
	public User getUser() {
		return user;
	}
	
	@Required
	public void setUser(User user) {
		this.user = user;
	}
	
	public void save() {
		System.out.println("Save user " + user.getName());
	}
	
	public void save(User user) {
		
		System.out.println("Save user " + user.getName());
	}
}

    配置:    code

<bean id="userDao" class="org.tunie.learn.spring.ioc.dao.UserDao" >
		<property name="user" ref="user"/>
	</bean>

    单元测试:

public class UserDaoTest {

	@Test
	public void testSave() {
		ApplicationContext applicationContext = ApplicationContextUtil.getApplicationContext();
		UserDao userDao = applicationContext.getBean("userDao", UserDao.class);
		userDao.save();
		assertEquals(userDao.getUser().getName() , "Tunie" );
	}

}

    运行经过!

    @Autowried,@Qualifier

    @Autowried自动装配注解,能够自动装配对应的属性,不过因为容器可能存在多个符合条件的备选bean,因此@Qualifier注解就能够大显其手了,它将缩小备选bean的范围。下面简单的列取下使用的demo吧。

    UserServer:   

public class UserServer {
	private UserDao userDao;

	public void add(User user) {
		userDao.save(user);
	}

	public UserDao getUserDao() {
		return userDao;
	}
	
	@Autowired
	@Qualifier("main")
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
}

    配置:   

<bean class="org.tunie.learn.spring.ioc.dao.UserDao">
		<qualifier value="main"/>
	</bean>
	<bean id="userServer" class="org.tunie.learn.spring.ioc.server.UserServer"/>

    即便存在上面的名为userDao的bean,咱们的userServer仍是能够很是准确的找到被qualifier标记为main的一个匿名bean。

相关文章
相关标签/搜索