回忆Spring IOC 几个注解&简单示例
2018-06-26 11:16
274 查看
@AutoWired @Resource @Component
1、新建maven项目,pom文件写入所需依赖(所需依赖以及版本在此查询复制即可 http://mvnrepository.com/ )
2、目录结构
3、User.java
4、UserDAO.java (接口 interface)
5、UserDAOImpl.java (实现类)
@Component("userDAO") 告诉Spring 这里有一个名字叫做userDAO的组件
6、UserService.java
@Resource(name="userDAO") 告诉Spring 这里的DAO注入 名字叫做 userDAO的bean
7、beans.xml
<context:component-scan base-package="com.kobe" /> 扫描com.kobe 目录下的所有文件
8、UserServiceTest.java
9、Run As - Junit Test
输出结果如下
user saved!
true
10、如果不使用@Component 的话,在beans.xml 中自己写bean的id和class
UserService.java 和 UserDAOImpl.java 的@Component去掉
UserService.java 中的 setUserDAO方法上的 @Resource 可以指定name,也可以让spring自动通过byName或者byType去找
默认按名称byName,名称找不到,按类型byType
运行测试类,输出一样
11、使用@AutoWired
默认按类型by type 如果想用byName,使用@Qualifier
输出结果一样。
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; }
输出结果一样。
相关文章推荐
- Mapxteme 2005 实现GIS 简单的几个功能示例
- [zhuan]Mapxteme 2005 实现GIS 简单的几个功能示例
- SpringMVC实现依赖注入的几个常用注解的用法解释和示例说明
- SpringMVC实现依赖注入的几个常用注解的用法解释和示例说明
- 【译文】详解Data Binding - 通过几个简单示例深入了解WinForm数据绑定特性
- Makefile的几个简单示例
- 基于注解Spring MVC 3.0简单示例
- 注解的Struts2简单示例
- 使用hibernate注解以及几个简单语句
- duilib中将xml封装为控件简单示例(简单自定义控件,封装几个基本控件合为1个自定义控件)
- 自定义注解判空简单示例
- 【SpringMVC】基于注解的SpringMVC简单示例
- 详解Data Binding - 通过几个简单示例深入了解WinForm数据绑定特性
- Spring aop 简单示例——基于XML配置和基于注解配置
- WebForm获取checkbox选中的值(几个简单的示例)
- synchronized(this)的几个简单示例
- synchronized(this)的几个简单示例
- 简单介绍java反射机制中Annotation(注解)与Method的程序示例
- 【转】详解Data Binding 通过几个简单示例深入了解WinForm数据绑定特性
- 天易47----Springmvc注解方式实现aop配置简单示例