使用注解实现Ioc的配置

@Service用于标注业务层组件

@Controller用于标注控制层组件(如struts中的action)

@Repository用于标注数据访问组件,即DAO组件

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

 

1.使用注解定义Bean

 1 /**
 2  * 用户DAO类,实现UserDao接口,负责User类的持久化操作
 3  */
 4 @Repository("userDao")
 5 public class UserDaoImpl implements UserDao {
 6 
 7     public void save(User user) {
 8         // 这里并未实现完整的数据库操作,仅为说明问题
 9         System.out.println("保存用户信息到数据库");
10     }
11 }

@Repository("userDao")的作用与在XML配置文件中编写<bean id="userDao" class="dao.impl.UserDaoImpl"/>等效。

2.使用注解实现Bean组件装配

 

 1 /**
 2  * 用户业务类,实现对User功能的业务管理
 3  */
 4 @Service("userService")
 5 public class UserServiceImpl implements UserService {
 6 
 7     @Autowired  // 默认按类型匹配
 8     @Qualifier("userDao") // 按指定名称匹配
 9     private UserDao dao;
10 
11     // 使用@Autowired直接为属性注入,可以省略setter方法
12     /*public void setDao(UserDao dao) {
13         this.dao = dao;
14     }*/
15 
16     public void addNewUser(User user) {
17         // 调用用户DAO的方法保存用户信息
18         dao.save(user);
19     }
20 }

 

Spring提供了@Autowired注解实现Bean的装配。

通过@Service标注了一个业务Bean,并使用@Autowired为dao属性注入所依赖的对象,Spring将直接对到属性进行赋值,此时类中可以省略属相相关的setter方法。

若容器中有一个以上类型相匹配的Bean时,则可以使用@Qualifier指定所需的Bean的名称。

使用@Autowired注解进行装配时,如果找不到相匹配的Bean组件,Spring容器会抛出异常。此时如果依赖不是必须的,为避免抛出异常,可以将required属性设置为false(默认为true)

@Autowired也可以对方法的入参进行标注,也可用于构造方法,实现构造注入。

3.加载注解定义的Bean

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 7     http://www.springframework.org/schema/context 
 8     http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 9     <!-- 扫描包中注解标注的类 -->
10     <context:component-scan base-package="service,dao" />
11 </beans>

首先在Spring配置文件中添加对context命名空间的声明,然后使用context命名空间下的component-scan标签扫描注解标注的类。base-package属性指定了需要扫描的基准包(多个包名用逗号隔开)。Spring会扫描这些包中所有的类,获取Bean的定义信息。

4.使用Java标准注解完成装配

除了提供@Autowired注解,Spring还支持使用JSR-250中定义的@Resource注解实现组件装配,该注解也能对类的成员变量或方法入参提供注入功能。

 1 /**
 2  * 用户业务类,实现对User功能的业务管理
 3  */
 4 @Service("userService")
 5 public class UserServiceImpl implements UserService {
 6   //为dao属性注入名为userDao的Bean
 7     @Resource(name = "userDao")
 8     //@Resource
 9     private UserDao dao;
10 
11     public void addNewUser(User user) {
12         // 调用用户DAO的方法保存用户信息
13         dao.save(user);
14     }
15 }

@Resource有一个name属性,默认情况下,Spring将这个属性的值解释为要注入的Bean的名称。

如果没有显式地指定Bean名称,@Resource注解将根据字段名或者setter方法名产生默认的名称。

 

转载于:https://www.cnblogs.com/chopper-zx/p/7885984.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值