SpringIOC-注解式

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

  1.什么是注解(1)注解是代码的特殊标记, 格式  @注解名(属性名=值,属性2=值2)(2)使用注解,注解作用在 类上面,方法上,属性上(3)使用注解目的: 简化xml配置2.spring针对bean 管理中创建对象提供注解(1) @Component  (2) @Service(3) @Controller(4) @Repository上面的四个注解功能是一样的,都可以用来创建对象3.基于注解方式实现对象的创建(1) 引入依赖 spring-aop-.jar(2) 开启组件扫描: 先引入context命名空间
<!--开启 组件扫描包如果 扫描多个包,多个包使用逗号隔开扫描包上层目录--><context:component-scan base-package="com.ly"/>
    (3)创建类, 在类上 添加 之前4个注解之一
    package com.ly.service;​import org.springframework.stereotype.Component;//注解里面value属性值可以省略不写,//默认值是 类名,首字母小写//UserService--->userService@Component // <bean id="userService">public class UserService {public void add(){System.out.println("--UserService--------add");}}​测试@Testpublic void testMyBean(){ApplicationContext ac = new         ClassPathXmlApplicationContext("bean1.xml");UserService s = ac.getBean("userService",UserService.class);s.add();}
     //控制台 输出--UserService--------add​

开启组件扫描细节配置

 
<!--use-default-filters="false" 表示现在不使用默认filter 自己配置filtercontext:include-filter 设置 扫描哪些内容--><!--扫描 com.ly 包下 带有Controller 注解的类--><context:component-scan base-package="com.ly" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>​​<!--context:exclude-filter 设置 哪些内容不进行扫描--><context:component-scan base-package="com.ly" ><context:exclude-filter  type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>

基于注解方式实现属性注入

1.@AutoWired:根据属性 类型 进行自动装配

a. 把 service和dao对象创建,在service和dao类添加创建对象的注解

b.在service中注入dao,在service类添加dao类型属性,并添加@AutoWired ,(不需要set方法)

 package com.ly.service;​import com.ly.dao.UserDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;​//注解里面value属性值可以省略不写,//默认值是 类名,首字母小写//UserService--->userService@Servicepublic class UserService {@Autowired   //根据类型注入private UserDao userDao;​public void add(){userDao.add();System.out.println("--UserService--------add");}}​
 
package com.ly.dao;​public interface UserDao {public void add();}​package com.ly.dao.impl;​import com.ly.dao.UserDao;import org.springframework.stereotype.Repository;​@Repositorypublic class UserDaoImpl implements UserDao {@Overridepublic void add() {System.out.println("dao add ......");}}
 
<!--开启 组件扫描包如果 扫描多个包,多个包使用逗号隔开扫描包上层目录--><context:component-scan base-package="com.ly"/>
 测试类
    @Testpublic void testMyBean(){ApplicationContext ac = new ClassPathXmlApplicationContext("bean1.xml");UserService s = ac.getBean("userService",UserService.class);s.add();}
 ​
 控制台输出dao add ......--UserService--------add

2.@Qualifier:根据属性名称 进行注入

@Qualifier和@Autowired 一起使用

 一个接口 可以有多个实现类, 当 使用时  就可以通过 @Qualifier和@Autowired 指定 名字 来指定具体实现​​
package com.ly.dao.impl;​import com.ly.dao.UserDao;import org.springframework.stereotype.Repository;​@Repository(value = "userDao1")public class UserDaoImpl implements UserDao {@Overridepublic void add() {System.out.println("dao add ......");}}
 package com.ly.dao;​public interface UserDao {public void add();}
package com.ly.service;import com.ly.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;//注解里面value属性值可以省略不写,
//默认值是 类名,首字母小写
//UserService--->userService
@Service
public class UserService {@Autowired   //根据类型注入@Qualifier(value = "userDao1")private UserDao userDao;public void add(){userDao.add();System.out.println("--UserService--------add");}
}
 
 
  @Testpublic void testMyBean(){ApplicationContext ac = new ClassPathXmlApplicationContext("bean1.xml");UserService s = ac.getBean("userService",UserService.class);s.add();}​
 控制台输出dao add ......--UserService--------add

3.@Resource: 可以根据类型注入,也可以根据名称注入

javax.annotation.Resource 是 java中的扩展包, 而不是spring中的, ,因此 spring 官方不太推荐使用

 package com.ly.service;​import com.ly.dao.UserDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;​import javax.annotation.Resource;​//注解里面value属性值可以省略不写,//默认值是 类名,首字母小写//UserService--->userService@Servicepublic class UserService {@Resource    //根据类型注入     // 改为 @Resource(name = "userDaoImpl")   则是按照 名称 注入private UserDao userDao;​public void add(){userDao.add();System.out.println("--UserService--------add");}}​

4.@Value 注入普通类型

  @Value(value="nihao")private String name;        // 此时 name 属性的值 就是 nihao

纯注解开发

 //1. 创建配置类,替代xml配置文件
 package com.ly.config;​import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;​@Configuration    //创建配置类 ,替代xml配置文件@ComponentScan(basePackages = {"com.ly"})    //配置扫描包 信息public class SpringConfig {}
 //2.编写测试类
 @Testpublic void testMyBean2(){ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);// 加载配置类UserService s = ac.getBean("userService",UserService.class);s.add();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink1.17实战教程(第四篇:处理函数)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

Hadoop集群找不到native-hadoop

1.问题描述 hive 运行中的问题&#xff0c;需要把把native复制进去 /usr/lib 2023-02-15 19:59:42,165 WARN scheduler.TaskSetManager: Lost task 11.0 in stage 1.0 (TID 3, common4, executor 2): java.lang.RuntimeException: Hive Runtime Error while closing operators…

获取当前进程cpu瞬时占用[linux][windows][c++]

linux #include <iostream> #include <fstream> #include <sstream> #include <unistd.h>class ProcessCPUMonitor { public:double getProcessCPUUsage() const {// 获取进程启动时间long startTime getProcessStartTime();// 获取进程的 CPU 时间l…

C# LINQ

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第22章《LINQ》 二、LINQ to XML 我们可以通过LINQ to XML来创造xml文件 如下示例&#xff0c;我们用LINQ to XML来创造。 <Books><CSharp Time"2019"><book>C# 入门经典</book><…

【Go语言入门:Go语言的数据结构】

文章目录 3.Go语言的数据结构&#xff1a;3.1. 指针3.2. struct&#xff08;结构体&#xff09;3.3. Map(映射,哈希&#xff09; 3.Go语言的数据结构&#xff1a; 简介&#xff1a; 在Go语言中&#xff0c;数据结构体可以分为四种类型&#xff1a;基础类型、聚合类型、引用类型…

uniapp 输入手机号并且正则校验

1.<input input“onInput” :value“phoneNum” type“number” maxlength“11”/> 3. method里面写 onInput(e){ this.phoneNum e.detail.value }, 4.调用接口时候校验正则 if (!/^1[3456789]\d{9}$/.test(this.phoneNum)) {uni.showToast({title: 请输入正确的手机号…

对于c++的总结与思考

笔者觉得好用的学习方法&#xff1a;模板法 1.采用原因&#xff1a;由于刚从c语言面向过程的学习中解脱出来&#xff0c;立即把思路从面向过程转到面向对象肯定不现实&#xff0c;加之全新的复杂语法与操作&#xff0c;着实给新手学习这门语言带来了不小的困难。所以&#xff…

【Linux系统编程】环境变量

介绍 环境变量是一个系统预定义的全局参数&#xff0c;系统自己开辟空间&#xff0c;将它存在于所有的Shell中&#xff0c;具有继承性&#xff0c;可以存储有关shell会话和工作环境的信息。 环境变量不是只有一个&#xff0c;而是一堆&#xff0c;是系统内具有特殊用途的变量。…

【动画视频生成】

转自&#xff1a;机器之心 动画视频生成这几天火了&#xff0c;这次 NUS、字节的新框架不仅效果自然流畅&#xff0c;还在视频保真度方面比其他方法强了一大截。 最近&#xff0c;阿里研究团队构建了一种名为 Animate Anyone 的方法&#xff0c;只需要一张人物照片&#xff0…

数据结构与算法教程,数据结构C语言版教程!(第一部分、数据结构快速入门,数据结构基础详解)二

第一部分、数据结构快速入门&#xff0c;数据结构基础详解 数据结构基础&#xff0c;主要研究数据存储的方式。 本章作为数据结构的入门课程&#xff0c;主要让读者明白&#xff0c;数据结构到底是什么&#xff0c;常用的数据存储结构有哪些&#xff0c;数据结构和算法之间到底…

钉钉机器人接入定时器(钉钉API+XXL-JOB)

钉钉机器人接入定时器&#xff08;钉钉APIXXL-JOB&#xff09; 首先需要创建钉钉内部群 在群设置中找到机器人选项 选择“自定义”机器人 通过Webhook接入自定义服务 创建完成后会生成一个send URL和一个加签码 下面就是干货 代码部分了 DingDingUtil.sendMessageByText(webho…

【Python】ubuntu python>3.9编译安装,及多个Python版本并存的使用方法

【Python】ubuntu python3.9编译安装&#xff0c;及多个Python版本并存的使用方法 1. 安装依赖2. 编译与安装2.1 依赖与源获取2.2 配置2.3 编译2.4 安装2.5 链接动态库 3. 多版本兼容 1. 安装依赖 更新系统软件 在正式开始之前&#xff0c;建议首先检查系统软件是否均为最新&a…

构建高效数据中台:集群规划与搭建的最佳实践指南

架构设计 Rack(机架)配置建议 大数据集群规划 安装细节见配套文档 YARN资源管理平台队列调度策略 Capacity Scheduler 默认配置下,Capacity Scheduler 将尝试保证每个队列在其分配的容量内公平地使用资源。 然而,Hadoop 也支持通过调整队列的权重和使用抢占策略来优化资…

《Spring Cloud学习笔记:微服务保护Sentinel》

Review 解决了服务拆分之后的服务治理问题&#xff1a;Nacos解决了服务治理问题OpenFeign解决了服务之间的远程调用问题网关与前端进行交互&#xff0c;基于网关的过滤器解决了登录校验的问题 流量控制&#xff1a;避免因为突发流量而导致的服务宕机。 隔离和降级&#xff1a…

微信小程序开发系列-04获取用户图像和昵称

这个功能的实现对于我这个新手来说可谓是一波三折。该功能的实现经历了三个“版本”的迭代&#xff0c;我的运气不是很好&#xff0c;从第一个“版本”开始尝试&#xff0c;这篇文章也是记录下这个过程&#xff0c;以便其他新手能快速找到解决方案。 Gen1-getUserInfo 第一个…

android studio导入module

在Android Studio中导入一个Module&#xff08;模块&#xff09;&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开Android Studio&#xff0c;并打开你的项目。在菜单栏中&#xff0c;点击 "File"&#xff08;文件&#xff09;-> "New"&#xf…

音视频学习(二十二)——rtmp发流(tcp方式)

前言 本文主要介绍自研的RtmpStreamSender.dll&#xff0c;rtmp库提供接口接收裸流数据&#xff0c;支持将裸流数据封装为flv格式并通过rtmp协议发流。 关于rtmp协议基础介绍可查看&#xff1a;https://blog.csdn.net/www_dong/article/details/131026072 关于rtmp收流介绍可…

django的gunicorn的异步任务执行

gunicorn 本身是一个WSGI HTTP服务器&#xff0c;用于运行Python的web应用&#xff0c;如Django项目。它并不直接提供执行异步任务的功能。异步任务通常是指那些你想要在web请求之外执行的后台任务&#xff0c;如发送电子邮件、处理长时间运行的计算或与外部API交互等。 在Dja…

可视化云监控/安防监控系统EasyCVR视频管理平台播流失败的原因(端口篇)

安防视频监控EasyCVR平台兼容性强&#xff0c;可支持的接入协议众多&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频…

C++ list的模拟实现

一 定义节点类 list相当于带头节点的双向链表&#xff0c;我们定义节点时要用类模板参数&#xff0c;同时定义_next、_prev指针和数据_data&#xff0c;使用struct定义节点类&#xff0c;因为节点类要能够被访问&#xff0c;而struct的默认访问权限就是public&#xff08;当然手…