IOC 操作 Bean 管理(基于注解方式)

1、什么是注解

​ (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)

​ (2)使用注解,注解作用在类上面,方法上面,属性上面

​ (3)使用注解目的:简化 xml 配置

2、Spring 针对 Bean 管理中创建对象提供注解

​ 下面四个注解功能是一样的,都可以用来创建 bean 实例

​ (1)@Component

​ (2)@Service

​ (3)@Controller

​ (4)@Repository

3、基于注解方式实现对象创建

​ 第一步 引入依赖 (引入spring-aop jar包)

​ 第二步 开启组件扫描

<!--开启组件扫描1 如果扫描多个包,多个包使用逗号隔开2 扫描包上层目录
-->
<context:component-scan base-package="com.atguigu"></context:component-scan>

​ 第三步 创建类,在类上面添加创建对象注解

//在注解里面 value 属性值可以省略不写,
//默认值是类名称,首字母小写
//UserService -- userService
@Component(value = "userService") //注解等同于XML配置文件:<bean id="userService" class=".."/>
public class UserService {public void add() {System.out.println("service add.......");}
}

​ 4、开启组件扫描细节配置

<!--示例 1use-default-filters="false" 表示现在不使用默认 filter,自己配置 filtercontext:include-filter ,设置扫描哪些内容
-->
<context:component-scan base-package="com.atguigu" use-defaultfilters="false"><context:include-filter type="annotation"expression="org.springframework.stereotype.Controller"/><!--代表只扫描Controller注解的类-->
</context:component-scan>
<!--示例 2下面配置扫描包所有内容context:exclude-filter: 设置哪些内容不进行扫描
-->
<context:component-scan base-package="com.atguigu"><context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller"/><!--表示Controller注解的类之外一切都进行扫描-->
</context:component-scan>

​ 5、基于注解方式实现属性注入

​ (1)@Autowired:根据属性类型进行自动装配

​ 第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解

第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解

@Service
public class UserService {//定义 dao 类型属性//不需要添加 set 方法//添加注入属性注解@Autowiredprivate UserDao userDao;public void add() {System.out.println("service add.......");userDao.add();}
}//Dao实现类
@Repository
//@Repository(value = "userDaoImpl1")
public class UserDaoImpl implements UserDao {@Overridepublic void add() {System.out.println("dao add.....");}
}

​ (2)@Qualifier:根据名称进行注入,这个@Qualifier 注解的使用,和上面@Autowired 一起使用

//定义 dao 类型属性
//不需要添加 set 方法
//添加注入属性注解
@Autowired //根据类型进行注入
//根据名称进行注入(目的在于区别同一接口下有多个实现类,根据类型就无法选择,从而出错!)
@Qualifier(value = "userDaoImpl1")
private UserDao userDao;

​ (3)@Resource:可以根据类型注入,也可以根据名称注入(它属于javax包下的注解,不推荐使用!)

//@Resource //根据类型进行注入
@Resource(name = "userDaoImpl1") //根据名称进行注入
private UserDao userDao;

​ (4)@Value:注入普通类型属性

@Value(value = "abc")
private String name

​ 6、完全注解开发

​ (1)创建配置类,替代 xml 配置文件

@Configuration //作为配置类,替代 xml 配置文件
@ComponentScan(basePackages = {"com.atguigu"})
public class SpringConfig {}

​ (2)编写测试类

@Test
public void testService2() {//加载配置类ApplicationContext context= new AnnotationConfigApplicationContext(SpringConfig.class);UserService userService = context.getBean("userService",
UserService.class);System.out.println(userService);userService.add();
}

spring IOC容器 Bean 管理——基于注解方式相关推荐

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

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

  2. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  3. spring的IOC容器Bean管理(基于xml方式)

    ==目的:==降低耦合度 ==技术:==xml解析.工厂模式.反射 ioc容器的实现 spring框架提供了两种实现方式(两个接口) BeanFactory接口 ioc容器的基本实现,是spring框 ...

  4. spring IOC容器设计理念与核心注解的使用

    bean的扫描和启动 bean的生命周期 ico容器如何解决bean的循环依赖问题 aop的源码解析 事务源码解析

  5. Spring IOC容器和Bean的配置

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

  6. Elasticsearch-mapper 基于注解方式生成mapping(2.0以上)

    Elasticsearch生成mapping的方式上有多种方式,我们可以把mapping做成配置文件,也可以用spring-data-elasticsearch基于注解生成. 在基于注解生成这种方式上 ...

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

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

  8. IOC操作Bean管理注解方式(创建对象)

    目录 IOC操作Bean管理注解方式(创建对象) 1.什么是注解 2.Spring 针对 Bean 管理中创建对象提供注解主要有以下四种 (1)@Component (2)@Service (3)@C ...

  9. Spring IoC容器与Bean管理

    Spring IoC容器与Bean管理 一.Spring IoC容器与Bean管理 1.Spring快速入门 IoC控制反转 DI依赖注入 Spring概述 Spring IoC初体验 使用XML方式 ...

最新文章

  1. iPod/iTouch/ipad/iPhone新手注意事项
  2. Tensorboard安装和访问(pytorch+MobaXterm)
  3. 成功解决AttributeError: module 'cv2.cv2' has no attribute 'CV_CAP_PROP_FPS'和 'CV_CAP_PROP_FRAME_WIDTH'
  4. ------------------字节流---------------------
  5. 几个常见的 slice 错误
  6. hashmap初试数组大小为什么一定要是2 的倍数
  7. fastdfs-zyc监控系统的使用
  8. IIS6同一IP部署多域名证书(部署指南)
  9. WebApp 安全入门
  10. ad转化输出电压值8086和ADC0808的Proteus仿真
  11. 仿真软件有哪些测试,仿真怎么去仿?测试怎么去测?虽然是问答篇,干货也不少,不要错过了!...
  12. 华为U8818 刷入Recovery教程+刷机
  13. MATLAB颜色的使用
  14. Markdown标记语言知识梳理
  15. 累计观看5.5亿+,盛世华诞,云上直播随地看
  16. 2022年宋干节活动-乌隆他尼皇家大学
  17. 瑞吉外卖——菜品展示功能(移动端)
  18. 算法笔记:Playing Atari with Deep Reinforcement Learning
  19. 手机写python脚本_用Python写王者荣耀刷金币脚本
  20. 推荐 :教你用神经网络求解高级数学方程!

热门文章

  1. linux内核那些事之struct page
  2. transformer中patch与token?
  3. [Unity][FlowCanvas] 被重复执行的节点,只要其中一次执行出现报错,该报错就会在脚本中一直显示
  4. [有限元] 刚度矩阵每一行的元素之和为零的条件
  5. [UE4]导入 PSD 文件失败的解决办法:输出为 PNG,将 PNG 再保存为 PSD 导入
  6. PSPNet-tensorflow实现并训练数据
  7. Win10 + VSCode踩坑 + vue项目开发:设置vscode终端为管理员权限
  8. phpcmsV9站群去除域名绑定目录中的HTML的方法
  9. 如何进行 node.js 的 安装与卸载
  10. excel vlookup用法_Python中也可以写Excel中的“Vlookup”函数?太牛逼了吧!