您的位置:首页 > 编程语言 > Java开发

回忆Spring IOC 几个注解&简单示例

2018-06-26 11:16 274 查看
@AutoWired @Resource @Component

1、新建maven项目,pom文件写入所需依赖(所需依赖以及版本在此查询复制即可 http://mvnrepository.com/

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.2</version>
</dependency>

2、目录结构



3、User.java

package com.kobe.model;

public class User {

private String username;
private String password;

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;
}
}

4、UserDAO.java (接口 interface)

package com.kobe.dao;

import com.kobe.model.User;

public interface UserDAO {
public void save(User user);
}

5、UserDAOImpl.java (实现类)

package com.kobe.dao.impl;

import org.springframework.stereotype.Component;

import com.kobe.dao.UserDAO;
import com.kobe.model.User;

@Component("userDAO")
public class UserDAOImpl implements UserDAO{
public void save(User user) {
//写入数据库相关的操作
System.out.println("user saved!");
}
}

@Component("userDAO") 告诉Spring 这里有一个名字叫做userDAO的组件

6、UserService.java

package com.kobe.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.kobe.dao.UserDAO;
import com.kobe.model.User;

@Component("userService")
public class UserService {

private UserDAO userDAO;

public void init() {
System.out.println("init");
}

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

public UserDAO getUserDAO() {
return userDAO;
}

@Resource(name="userDAO")
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}

public void destory() {
System.out.println("destroy");
}

}

@Resource(name="userDAO") 告诉Spring 这里的DAO注入 名字叫做 userDAO的bean

7、beans.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" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config />
<context:component-scan base-package="com.kobe" />
<!--    <bean id="userDAO" class="com.kobe.dao.impl.UserDAOImpl">
</bean>
<bean id="userDAO2" class="com.kobe.dao.impl.UserDAOImpl">
</bean>

<bean id="userService" class="com.kobe.service.UserService" scope="singleton">
</bean>    -->

</beans>

<context:component-scan base-package="com.kobe" /> 扫描com.kobe 目录下的所有文件

8、UserServiceTest.java

package com.kobe.service;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.kobe.model.User;

public class UserServiceTest {

@Test
public void testAdd() throws Exception {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

UserService service = (UserService) ctx.getBean("userService");
UserService service2 = (UserService) ctx.getBean("userService");

service.add(new User());

System.out.println(service == service2);

ctx.destroy();
}
}

9、Run As - Junit Test

输出结果如下

user saved!
true

10、如果不使用@Component 的话,在beans.xml 中自己写bean的id和class

<bean id="userDAO" class="com.kobe.dao.impl.UserDAOImpl">
</bean>
<bean id="userDAO2" class="com.kobe.dao.impl.UserDAOImpl">
</bean>

<bean id="userService" class="com.kobe.service.UserService" scope="singleton">
</bean>

UserService.java 和 UserDAOImpl.java 的@Component去掉

UserService.java 中的 setUserDAO方法上的 @Resource 可以指定name,也可以让spring自动通过byName或者byType去找

默认按名称byName,名称找不到,按类型byType

@Resource
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}

运行测试类,输出一样

11、使用@AutoWired

默认按类型by type 如果想用byName,使用@Qualifier

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

@Autowired
public void setUserDAO(@Qualifier("userDAO") UserDAO userDAO) {
this.userDAO = userDAO;
}

输出结果一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JUnit Java Spring