Spring常用的的注解对应xml配置详解

@Component(value="")注解:组件

  1. 标记在类上,也可以放在接口上
  2. 注解作用:把AccountDao实现类对象交由Spring IOC容器管理
    相当于XML配置文件中的Bean标签
<bean id="userAnnonMapper" class="com.spring.mapper.UserAnnonMapperImpl"></bean>
  1. 注解Value属性:相当于bean标签id,对象在IOC容器中的唯一标识,可以不写,默认值是当前类首字母缩写的类名。注入时需要注意此名称!!。
  2. 三个衍射注解分别是:@Controller,@Service,@Repository。
    作用与@Component注解一样
    设计初衷增加代码的可读性,体现在三层架构上
    @Controller一般标注在表现层
    @Service一般标注在业务层
    @Repository一般 标注在持久层

注意:此注解必须搭配扫描注解使用

@Configuration 
@ComponentScan("com.*") 
public class SpringConfig{}

或 XML配置

<context:component-scan base-package="com.*"></context:component-scan>

进行注解扫描。

@Autowired注解:byType自动注入

  1. 标记在成员变量或set方法上
  2. 注解作用:自动将ioc容器中的对象注入到当前的成员变量中。
    默认按照变量数据类型注入,如果数据类型是接口,注入接口实现类。
    相当于XML配置文件中的property标签
<property name="accountDao" ref="accountDao"/>
  1. 按照变量的数据类型注入,它只能注入其他的bean类型
  2. 注意事项:
    成员变量的接口数据类型,有多个实现类的时候,要使用bean的id注入,否则会报错。
    Spring框架提供的注解
    必须指定Bean的id,使用@Qualifier的注解配合,@Qualifier注解的value属性指定bean的id

举例

@Component("userAnnonService02") 
public class UserAnnonServiceImpl01 implements UserAnnonService {} @Component("userAnnonService01") 
public class UserAnnonServiceImpl02 implements UserAnnonService {}

使用需要注意,因为一个接口被两个实现类实现,所以根据属性已经失效了使用@Qualifier选择要注入的实现类

public class Test{    @Autowired    @Qualifier("userAnnonService01")    UserAnnonService userAnnonService;    
}    

其他补充

<bean id="userService" class="com.spring.service.UserServiceImpl">    <property name="userMapper" ref="userMapper"></property> 
</bean> <bean id="userMapper" class="com.spring.mapper.UserMapperImpl"></bean>

等价于注解开发的

@Component("userService") 
public class UserServiceImpl implements UserService {     @Autowired     UserAnnonMapper userAnnonMapper; 
}@Component("userAnnonMapper")
public class UserMapperImpl implements UserMapper {}

这里是我认为初学者比较容易搞混的地方。

@Resource(name="") byName注解(jdk提供)

  1. 标记在成员变量或set方法上
  2. 注解作用:相当于@Autowired的注解与@Qualifier的注解合并了,直接按照bean的id注入。
    相当于XML配置文件中的property标签
<property name="accountDao" ref="accountDao"/>
  1. name属性:指定bean的id
  2. 如果不写name属性则按照变量数据类型注入,数据类型是接口的时候注入其实现类。如果定义name属性,则按照bean的id注入。
  3. Java的JDK提供本注解。

@Configuration注解

标记在类上
注解作用:作用等同于beans.xml配置文件,当前注解声明的类中,编写配置信息,所以我们把
@Configuration声明的类称之为配置类。

//通过配置xml的获取
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
accountService = ac.getBean("accountService ");
//通过配置类,初始化Spring的ioc容器
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
//获取AccountService接口的实现类对象
accountService = ac.getBean(AccountService.class);

@Import注解

标记在类上
注解作用:导入其他配置类(对象)
相当于XML配置文件中的标签

<import resource="classpath:applicationContext-dao.xml"/>

引用场景
在配置文件按配置项目时使用xml分层
例如 mvc.xml,dao.xml,service.xml分别配置提高可读性和可维护性,使用 import 引入同一个xml中进行读取。
多个configuration配置类时使用
@Import(配置类.class) 或 @Import({配置类.class,配置类.class}) 参数为数组加载多个配置类

@PropertySource注解

标记在类上
注解作用:引入外部属性文件(db.properties)
相当于XML配置文件中的context:property-placeholder标签

<context:property-placeholder location="classpath:jdbc.properties"/>
@Configuration 
@PropertySource({"db.properties"})
public class SpringConfigClass {}

或者

@PropertySource("classpath:db.properties")

@Value注解

标记在成员变量或set方法上
注解作用:给简单类型变量赋值
相当于XML配置文件中的标签

<property name="driverClass" value="${jdbc.driver}"/>

@Bean注解

标记在配置类中的方法上
注解作用:将方法的返回值存储到Spring IOC容器中
相当于XML配置文件中的标签

举例 @PropertySource @Value @Bean 的整合

@Configuration 
@PropertySource({"db.properties"})
public class SpringConfigClass {     @Value("${jdbc.driver}")     private String dataSource;     @Value("${jdbc.url}")     private String url;     @Value("${jdbc.username}")     private String userName;     @Value("${jdbc.password}")     private String passWord;     @Bean     public DruidDataSource dataSource() {         DruidDataSource druidDataSource = new DruidDataSource();         druidDataSource.setDriverClassName(dataSource);         druidDataSource.setUrl(url);         druidDataSource.setUsername(userName);         druidDataSource.setPassword(passWord);         return druidDataSource;     } 
}

等价于 xml

<context:property-placeholder location="classpath*:db.properties"/>     
<!--注入 druid-->     
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">         <property name="driverClassName" value="${jdbc.driver}"></property>         <property name="url" value="${jdbc.url}"></property>         <property name="username" value="${jdbc.username}"></property>        <property name="password" value="${jdbc.password}"></property>     
</bean>

@ComponentScan(“com.*”)注解

标记在配置类上
相当于XML配置文件中的context:component-scan标签

<context:component-scan base-package="com.spring.annotation" use-default-filters="false">   <context:include-filter type="custom"  expression="com.spring.annotation.filter.ColorBeanLoadFilter" />   <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component" />
</context:component-scan>
@Configuration 
@ComponentScan 
public class SpringConfigClass { }

属性
value:指定要扫描的package; 若value值为空则扫描当前配置类的包以及子包。
includeFilters=Filter[]:指定只包含的组件
excludeFilters=Filter[]:指定需要排除的组件;
useDefaultFilters=true/false:指定是否需要使用Spring默认的扫描规则:被@Component, @Repository, @Service, @Controller或者已经声明过@Component自定义注解标记的组件;
在过滤规则Filter中:
FilterType:指定过滤规则,支持的过滤规则有
ANNOTATION:按照注解规则,过滤被指定注解标记的类;
ASSIGNABLE_TYPE:按照给定的类型;
ASPECTJ:按照ASPECTJ表达式;
REGEX:按照正则表达式
CUSTOM:自定义规则;
value:指定在该规则下过滤的表达式;

	扫描指定类文件    @ComponentScan(basePackageClasses = Person.class) 扫描指定包,使用默认扫描规则,即被@Component, @Repository, @Service, @Controller或者已经声明过@Component自定义注解标记的组件;    	   @ComponentScan(value = "com.yibai") 扫描指定包,加载被@Component注解标记的组件和默认规则的扫描(因为useDefaultFilters默认为true@ComponentScan(value = "com", includeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) }) 扫描指定包,只加载Person类型的组件    @ComponentScan(value = "com", includeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, value = Person.class) }, useDefaultFilters = false) 扫描指定包,过滤掉被@Component标记的组件    @ComponentScan(value = "com", excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) }) 扫描指定包,自定义过滤规则    @ComponentScan(value = "com.yibai", includeFilters = { @Filter(type = FilterType.CUSTOM, value = ColorBeanLoadFilter.class) }, useDefaultFilters = true

举例

// useDefaultFilters = false 关闭默认过滤使用创建的过滤  
// value = {UserAllAnnonService.class, UserAllAnnonMapper.class} 只扫描这两个接口的组件注解
@Configuration 
@ComponentScan(includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {UserAllAnnonService.class, UserAllAnnonMapper.class})},useDefaultFilters = false) 
public class SpringConfigClass { }

@EnableAspectJAutoProxy 开启Aop注解支持

对应标签
aop:aspectj-autoproxy/
举例

@Configuration 
@ComponentScan 
@PropertySource("classpath:db.properties") 
@ImportResource({"classpath:beans.xml"}) 
@EnableAspectJAutoProxy 
public class SpringConfigClass {...}

@EnableTransactionManagement 开启注解事务控制

对应xml标签

<tx:annotation-driven/>
@Configuration 
@ComponentScan 
@PropertySource("classpath:sqlLink.properties") 
@ImportResource({"classpath:beans.xml"}) 
@EnableTransactionManagement 
public class SpringConfigClass {...}

@Transactional() 事务处理,加到方法上,开启当前方法的事务支持

常用属性
transactionManager 属性: 设置事务管理器,如果不设置默认是transactionManager。
isolation属性: 设置事务的隔离级别。
propagation属性: 事务的传播行为。

@Override 
@Transactional(transactionManager = "transactionManager", isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED) 
public Integer saveUser(User user) {    Integer integer = userMapper.saveUser(user);    return integer; 
}

其他注解

@Scope(“prototype”)

标记在类上,配合@Component使用
注解作用:指定对象的作用范围:单例模式(singleton)还是多例模式(prototype)

@PostConstruct、@PreDestroy 生命周期注解

@PostConstruct ==> init-method
举例:

@Component
public class School {@PostConstructpublic void init(){System.out.println("annotation PostConstruct");}
}
    <bean id = "school" class="com.abc.model.School" init-method="init"></bean>

@PreDestroy ==> destroy
举例:​

@Component
public class School {@PreDestroypublic void destroyMethod(){System.out.println("annotation PostConstruct");}
}
    <bean id = "school" class="com.abc.model.School" destroy-method="init"></bean>

@ImportResource({“classpath:beans.xml”})

引入外部配置,此注解适用于配置类和xml配置共同存在
举例

@Configuration 
@ComponentScan 
@PropertySource("classpath:db.properties") 
@ImportResource({"classpath:beans.xml"}) 
public class SpringConfigClass {...}

对应xml配置

<import resource="beans.xml"></import>

@Aspect 切面

注解作用:当前类的对象,是一个切面类

<aop:config><aop:aspect id="" ref="" /></aop:config>

@Pointcut 切点

@Pointcut("execution(public void com.itheima.service.AccountServiceImpl.save())") 
public void pointcut() {}

对应xml

<aop:pointcut id="pointcutService" expression="execution(* com.spring.service.UserServiceImpl.*(..))"/>

@After(“pointcut()”) 后置通知
@AfterThrowing(“pointcut()”) 异常通知
@AfterReturning(“pointcut()”) 最终通知
@Before(“pointcut()”) 前置通知
举例

@Before("pointcut()") 
public void beforePrintLog() {     System.out.println("方法执行之前,输出日志"); 
}

对应xml

<aop:before method="beforePrintLog" pointcut-ref="pointcutService"/>

@Around(“pointcut()”) 环绕通知

//要求必须要传递一个参数: ProceedingJoinPoint 
@Around("pointcut()") 
public void aroundPrint(ProceedingJoinPoint joinPoint) {}

@MapperScan

指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类

@MapperScan("com")

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

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

相关文章

安卓模拟器bluestacks mac地址修改教程

http://szmars2008.blog.163.com/blog/static/118893702201373181349348/ 转载于:https://www.cnblogs.com/prayer521/p/4069037.html

Docker 搭建 ELK 日志系统,并通过 Kibana 查看日志

Docker 搭建 ELK 日志系统,并通过 Kibana 查看日志 docker-compose.yml version: 3 services:elasticsearch:image: elasticsearch:7.7.0 #镜像container_name: elasticsearch #定义容器名称restart: always #开机启动&#xff0c;失败也会一直重启environment:- "cl…

蟠桃记

Problem Description 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事&#xff0c;你们一定都觉得这猴子太闹腾了&#xff0c;其实你们是有所不知&#xff1a;悟空是在研究一个数学问题&#xff01; 什么问题&#xff1f;他研究的问题是蟠桃一共有多少个&#xff01; 不过&#…

Spring 定时任务动态管理

管理 Spring 中定时任务 pom.xml <properties><hutool.version>5.6.6</hutool.version><lombok.version>1.18.20</lombok.version><spring-boot.web.version>2.2.10.RELEASE</spring-boot.web.version> </properties><de…

高效率Oracle SQL语句

1、Where子句中的连接顺序&#xff1a; ORACLE采用自下而上的顺序解析WHERE子句。 根据这个原理&#xff0c;表之间的连接必须写在其他WHERE条件之前&#xff0c; 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 举例&#xff1a; (低效) select ... from table1…

RabbitMQ Management:Management API returned status code 500

错误显示&#xff1a; 解决方案&#xff1a; 因为是使用docker 容器安装的&#xff0c;所有需要进入容器 docker exec -it rabbitmq /bin/bash进入目录 cd /etc/rabbitmq/conf.d/执行命令 echo management_agent.disable_metrics_collector false > management_agent.dis…

Android JNI和NDK学习(5)--JNI分析API

Java类型和本地类型对应 在如下情况下&#xff0c;需要在本地方法中应用java对象的引用&#xff0c;就会用到类型之间的转换&#xff1a; java方法里面将参数传入本地方法&#xff1b;在本地方法里面创建java对象&#xff1b;在本地方法里面return结果给java程序。Java基本类型…

RabbitMq 消费失败,重试机制

方案一&#xff1a; 本地消息表 定时任务 本地消息表&#xff1a;主要用于存储 业务数据、交换机、队列、路由、次数 定时任务&#xff1a;定时扫描本地消息表&#xff0c;重新给业务队列投递消息。 具体思路&#xff1a;业务队列消费失败时&#xff0c;把 业务数据、交换机、…

Android常用的工具类

主要介绍总结的Android开发中常用的工具类&#xff0c;大部分同样适用于Java。目前包括HttpUtils、DownloadManagerPro、ShellUtils、PackageUtils、 PreferencesUtils、JSONUtils、FileUtils、ResourceUtils、StringUtils、 ParcelUtils、RandomUtils、ArrayUtils、ImageUtils…

0. Spring 基础

BeanDefinition BeanDefinition 表示 Bean 定义&#xff1a; Spring根据BeanDefinition来创建Bean对象&#xff1b;BeanDefinition有很多的属性用来描述Bean&#xff1b;BeanDefiniton是Spring中非常核心的概念。BeanDefiniton中重要的属性&#xff1a; a. beanClass&#xf…

1. Spring 源码:Spring 解析XML 配置文件,获得 Bena 的定义信息

通过 Debug 运行 XmlBeanDefinitionReaderTests 类的 withFreshInputStream() 的方法&#xff0c;调试 Spring 解析 XML 配置文件&#xff0c;获得 Bean 的定义。 大体流程可根据序号查看&#xff0c;xml 配置文件随便看一眼&#xff0c;不用过多在意。 <?xml version&qu…

c++ 读取文件 最后一行读取了两次

用ifstream的eof()&#xff0c;竟然读到文件最后了&#xff0c;判断eof还为false。网上查找资料后&#xff0c;终于解决这个问题。 参照文件&#xff1a;http://tuhao.blogbus.com/logs/21306687.html 在使用C/C读文件的时候&#xff0c;一定都使用过eof&#xff08;&#xff0…

java中的io系统详解(转)

Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符&#xff0c;分别操作字符、字符数组或字符串&#xff0c;而字节流处理单元为 1 个字节&#xff0c;操作字节和字节数组。 Java 内用 Unicode 编码存储字符&#xff0c;字符流处理类负责将外部的…

js获取字符串最后一个字符代码

方法一&#xff1a;运用String对象下的charAt方法 charAt() 方法可返回指定位置的字符。 代码如下 复制代码 str.charAt(str.length – 1) 请注意&#xff0c;JavaScript 并没有一种有别于字符串类型的字符数据类型&#xff0c;所以返回的字符是长度为 1 的字符串 方法二&#…

Unity3D Shader入门指南(二)

关于本系列 这是Unity3D Shader入门指南系列的第二篇&#xff0c;本系列面向的对象是新接触Shader开发的Unity3D使用者&#xff0c;因为我本身自己也是Shader初学者&#xff0c;因此可能会存在错误或者疏漏&#xff0c;如果您在Shader开发上有所心得&#xff0c;很欢迎并恳请您…

JVM:如何分析线程堆栈

英文原文&#xff1a;JVM: How to analyze Thread Dump 在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息&#xff0c;通常远超出你的想象&…

一个工科研究生毕业后的职业规划

http://blog.csdn.net/wojiushiwo987/article/details/8592359一个工科研究生毕业后的职业规划 [wojiushiwo987个人感触]:说的很诚恳&#xff0c;对于马上面临毕业的我很受用&#xff0c;很有启发。有了好的职业生涯规划&#xff0c;才有了前进的方向和动力&#xff0c;才能…

SQLSERVER中如何忽略索引提示

SQLSERVER中如何忽略索引提示 原文:SQLSERVER中如何忽略索引提示SQLSERVER中如何忽略索引提示 当我们想让某条查询语句利用某个索引的时候&#xff0c;我们一般会在查询语句里加索引提示&#xff0c;就像这样 SELECT id,name from TB with (index(IX_xttrace_bal)) where bal…

JavaScript——以简单的方式理解闭包

闭包&#xff0c;在一开始接触JavaScript的时候就听说过。首先明确一点&#xff0c;它理解起来确实不复杂&#xff0c;而且它也非常好用。那我们去理解闭包之前&#xff0c;要有什么基础呢&#xff1f;我个人认为最重要的便是作用域&#xff08;lexical scope&#xff09;&…

jquery实现二级联动不与数据库交互

<select id"pro" name"pro" style"width:90px;"></select> <select id"city" name"city" style"width: 90px"></select> $._cityInfo [{"n":"北京市","c"…