----更加简化的版本

UserAction.java

import javax.annotation.Resource;import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;//@Component("userAction")  // 加入IOC容器//@Component@Controller  // 控制层的组件
public class UserAction {@Resourceprivate UserService userService;public String execute() {userService.save();return null;}
}

UserService.java

import javax.annotation.Resource;import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;//@Component("userService")  // userService加入ioc容器//@Component@Service   // 表示业务逻辑层的组件
public class UserService {//    @Resource  //  根据类型查找 【在容器中要确保该类型只有一个变量】@Resource(name = "userDao")  // 根据名称查找private UserDao userDao;  // 去容器中招UserDao类型的变量,找到后就赋值public void save() {userDao.save();}
}

UserDao.java

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;// 把当前对象加入ioc容器
//@Component("userDao")   //  相当于bean.xml 【<bean id=userDao class=".." />】//@Component  // 加入ioc容器的UserDao对象的引用名称, 默认与类名一样, 且第一个字母小写@Repository   // 在持久层可以选择用这个注解
public class UserDao {public UserDao(){System.out.println("UserDao.UserDao()");}public UserDao(int id){System.out.println("UserDao.UserDao(int id)" + id);}public void save() {System.out.println("zengmg:保存用户!!!");}
}

bean.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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="zengmg.e_anno2"></context:component-scan><bean id="userDao" class="zengmg.UserDao" scope="prototype"></bean></beans>   

测试代码:

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {// 创建容器对象private ApplicationContext ac = new ClassPathXmlApplicationContext("zengmg/e_anno2/bean.xml");@Testpublic void testExecuteAction() {// 从容器中获取ActionUserAction userAction = (UserAction) ac.getBean("userAction");userAction.execute();}
}

Spring IOC容器-注解的方式【更简化】相关推荐

  1. Spring IOC容器-注解的方式

    注解方式可以简化spring的IOC容器的配置,但不利于后期维护,对象之间的依赖关系不能像xml文件一样方便查阅,一目了然. 注解可以和XML配置一起使用. 使用注解步骤: 1)先引入context名 ...

  2. 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式

    每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...

  3. Spring IOC容器-Bean管理——基于XML方式

    Spring IOC容器-Bean管理--基于XML(续集) 1.IOC 操作 Bean 管理(FactoryBean) ​ 1).Spring 有两种类型 bean,一种普通 bean,另外一种工厂 ...

  4. Spring入门到精通:第二章 IOC容器(XML方式):1.IOC概念

    百度百科表述: 控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependenc ...

  5. Spring IOC容器和Bean的配置

    Spring IOC容器 和Bean的配置 : IOC和DI IOC(Inversion of Control):反转控制 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的 ...

  6. Spring – IoC 容器

    Spring IoC 容器是 Spring 框架的核心.容器将创建对象,将它们连接在一起,进行配置,并管理从创建到销毁的整个生命周期.Spring 容器使用依赖项注入(DI)来管理组成应用程序的组件. ...

  7. Spring IOC 容器源码分析 - 填充属性到 bean 原始对象

    1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反 ...

  8. Spring IOC 容器源码分析 - 创建原始 bean 对象

    1. 简介 本篇文章是上一篇文章(创建单例 bean 的过程)的延续.在上一篇文章中,我们从战略层面上领略了doCreateBean方法的全过程.本篇文章,我们就从战术的层面上,详细分析doCreat ...

  9. Spring IOC 容器源码分析系列文章导读 1

    1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...

最新文章

  1. 下一代防火墙市场高速增长,年复合增长率为13.6%
  2. 一款纯css3实现的响应式导航
  3. PAT 甲级 1027 Colors in Mars
  4. Java Trie字典树,前缀树
  5. 解决IIS SMTP无法发信的故障
  6. 金蝶结账时显示系统错误h80004005_金蝶KIS云专业版(仓存模块)常见问题解决汇总...
  7. 天际数见数据质量巡检架构优化
  8. 较为周全的Asp.net提交验证方案 (下)
  9. 全字库说文解字字体_【180期】可商用字体大全,无版权纠纷!
  10. Flask Oauth
  11. mysql查找数据库中是否已经存在某张表
  12. nginx rewrite解决 jenkins error 404心得笔记
  13. 47 Python - 装饰器 回忆函数基础
  14. 八、接口中的默认方法与静态方法
  15. php require失败,关于php:致命错误:require_once()[function.require]:要求打开失败
  16. 征途猎魔mysql数据库_字典列表的拓展理解
  17. Unity组件:Lens Flare 镜头光晕
  18. android显示大图片
  19. “adb”不是内部或外部命令,也不是可运行的程序或批处理文件
  20. 从多臂老虎机开始学习强化学习中的探索与利用

热门文章

  1. oracle导出中文utf8乱码,ORACLE导入导出后发生中文乱码的原因及解决办法
  2. 2002勘察设计收费标准_上海装修设计师的收费标准是什么?
  3. android 克隆对象,克隆会破坏单例对象吗?
  4. junit4进行单元测试
  5. 2014 网选 5011 Game(Nim游戏,数学题)
  6. 你的main函数规范吗?
  7. 南通大学计算机系本二,2012年南通大学计算机科学与技术学院江苏省内第二批本科(院校代码:1301)...
  8. linux配置usb主从_杂集:浅谈关于Mongodb数据库主从复制
  9. thymealf 高级用法_Thymeleaf
  10. Linux系统的基本安装