Spring framework(十)基于注解装配Bean

一、装配Bean的注解

XML配置文件可以实现装配Bean,但是如果应用中Bean的数量较多,会导致XML配置文件过于臃肿,给升级维护带来一定的困难。

JDK5.0以后,提供了Annotation(注解)功能,Spring2.5版本也提供了对Annotation技术的全面支持,可以使用注解来配置依赖注入。

Spring默认不使用注解装配Bean,因此需要在XML配置文件中添加context:annotation-config/开启注解。

注解包含如下:

注解描述
@Component它是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次,使用时只需要将注解标注到相应的类上。
@Repository用于将数据访问层(Dao)的类标识为Spring的Bean,功能与@Component相同。
@Service作用在业务层(Service),将业务层的类标识为Spring的Bean,功能与@Component相同。
@Controller通常作用在控制层(Struts2:Action、SpringMVC:controller),标识控制层类为Spring中的Bean,功能与@Component相同。
@Autowired可以应用到Bean的属性变量、属性的Setter方法、非Setter方法以及构造函数等,配合对应的注解处理器完成Bean的自动装配。
@Resource作用与@Autowired相同,区别在于@Autowired默认按照Bean类型装配,而@Resource默认按照Bean实例名称装配。
@Qualifier与@Autowired配合使用,会将默认按Bean类型装配修改为按照Bean的实例名称装配,Bean实例名称由@Qualifier参数指定。

说明:@Resource有两个重要属性:name和type。Spring将name属性解析为Bean的实例名称,type属性解析为Bean的实例类型。指定name,按照实例名称进行装配;指定type,按照Bean类型进行装配。如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。

二、实例

public interface UserDao {
    public void outContent();
}
@Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void outContent() {
        System.out.println("用户实现持久层");
    }
}
public interface UserService {
    public void outContent();
}
@Service("userService")
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao; 

    @Override
    public void outContent() {
        userDao.outContent();
        System.out.println("调用了用户服务实现类");
    }
}

@Controller("userController")
public class UserController {

    @Resource
    private UserService userService; 

    public void outContent(){
        userService.outContent();
        System.out.println("调用user的服务类");
    }

}
<?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-3.0.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--  使用context命名空间,通知Spring扫描指定目录,进行注解解析  -->
    <context:component-scan  base-package="com.jsonliu" />
</beans>
public class MainApp3 {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("Beans4.xml");
        UserController userController = (UserController) context.getBean("userController");
        userController.outContent(); 
    }
} 

运行结果:

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑谈子云亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值