spring注解注入配置
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring注解注入配置内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring注解注入配置相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring注解注入配置相关知识
-
专题二:Bean(注解配置)---- Spring入门专题二:Bean(注解配置)---- Spring入门 Bean 定义及作用域的注解实现 Classpath 扫描与组件管理 类的自动检测与注册 Bean <context: annotation-config/> @Component, @Repository, @Service, @Controller Autowired 注解说明 @Required @Autowired @Qualifier @Resource 基于 Java 的容器注解说明 Spring 对 JSR 支持的说明 <!--more--> Bean 定义及作用域的注解实现 Classpath 扫描与组件管理 Spring3.0 开始,可以使用 Java 定义 Bean (以前使用XML
-
Spring注解配置和xml配置优缺点比较Spring注解配置和xml配置优缺点比较编辑在昨天发布的文章《spring boot基于注解方式配置datasource》一文中凯哥简单的对xml配置和注解配置进行了比较。然后朋友看到文章后,就问:那你说说这两种区别。编辑额,说真的,还真把凯哥给问蒙圈了。本文来源:凯哥Java【kaigejava】凯哥当时就回答:注解的方便。如果再深入呢?还真说不明白。是啊,现在都在说注解好,但是注解和xml比较起来有哪些优点呢?xml又为什么不好呢?有没有深入思考过么?以下内容是凯哥从网上找的并加以理解的。想要弄清楚这个,我们先来看看Xml.就目前Java web 开发应用中都能见到用xml作为配置的身影。在常用的框架中如:struts、spring mvc、hibernate、mybites等这些框架中(早期版本表现更为突出)都有xml配置。我们就来看看XML的优点:Xml优点1:xml是集中式的元数据,不需要和代码绑定的;在我们开发中,xml配置文件和代码类是区分开的。不需要绑定到代码中2:使用xml配置可以让软件
-
spring之旅第四篇-注解配置详解一、引言最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会有错的。上一篇spring的配置博客评论中有园友指出现在很少用xml类配置SpringBean了,都是用注解的方式来进行配置,那么这篇就来讲注解配置。使用.xml文件来对bean进行注入的缺点很明显:文件会十分庞大,如果分多模块去配置,文件又特别的多,这些会导致可读性和可维护性变差。为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。二、将对象注册到容器注解如何使用呢,分为三步第一步:在 applicationContext.xml 中引入命名空间第二步:在 applicationContext.xml 文件中引入注解扫描器 <context:component-scan base-
-
spring注解注入:&lt;context:component-scan&gt;详解spring从2.5版本开始支持注解注入,注解注入可以省去很多的xml配置工作。由于注解是写入java代码中的,所以注解注入会失去一定的灵活性,我们要根据需要来选择是否启用注解注入。我们首先看一个注解注入的实际例子,然后再详细介绍context:component-scan的使用。如果你已经在用spring mvc的注解配置,那么你一定已经在使用注解注入了,本文不会涉及到spring mvc,我们用一个简单的例子来说明问题。本例中我们会定义如下类:PersonService类,给上层提供Person相关操作PersonDao类,给PersonService类提供DAO方法Person类,定义Person相关属性,是一个POJOApp类,入口类,调用注解注入的PersonService类PersonService类实现如下:package cn.outofmemory.spring; import org.springframework.beans.factory.annotat
spring注解注入配置相关课程
-
使用Google Guice实现依赖注入 本课程将带领大家通过Google Guice来系统的学习DI思想中的绑定,注入,生命周期,aop等方面的技巧。并示范Guice和Spring Boot如何协作。对于熟悉Spring的同学,学完本课后可以了解两者异同,加深对DI和Spring的理解。不只是为了单纯教授Gucie的用法,而是以Guice为媒介,希望使同学们在编程能力上能有所提高。 双十一双重好礼相送: 第一重:课程加量不加价; 第二重:小伙伴们可以凭借好评召唤幸运之神;将从评价用户中抽取三名幸运之星,赠送价值:499美元折合人民币约:3500RMB,请看图二; 【抽奖结果将在16-20号之间通过评价回复公布】活动详情传送门:https://coding.imooc.com/class/evaluation/180.html#Anchor
讲师:ccmouse 高级 9896人正在学习
spring注解注入配置相关教程
- 3.3 用元注解配置注解 在前面学习 Java 内置的注解的时候,我们已经了解了元注解,元注解就是用于修饰其他注解的注解。通常只需使用这些内置元注解,就可以基本满足我们自定义注解的需求。下面我们将会详解 Java 内置的 5 个元注解,你将会了解为什么需要这些元注解。3.3.1 @RetentionRetention译为保留。@Retention注解定义了一个注解的生命周期(我们前面对于 Java 注解的分类,就是通过其生命周期来划定界限的)。它可以有如下几种取值:RetentionPolicy.SOURCE:注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视;RetentionPolicy.CLASS:注解只被保留到编译进行的时候,它并不会被加载到 JVM 中;RetentionPolicy.RUNTIME:注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。下面我们使用@Retention注解来指定我们自定义的注解@Length的生命周期,实例如下:import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)public @interface Length { int min() default 0; int max() default Integer.MAX_VALUE; String message() default "长度不合法";}上面的代码中,我们指定 @Length 注解可以在程序运行期间被获取到。3.3.2 @Documented这个元注解的作用很简单,标注了此注解的注解,能够将注解中的元素包含到 Javadoc 中去。因此不做过多解释。3.3.3 @Target@Target 注解是最为常用的元注解,我们知道注解可以被应用于类、方法、变量、参数和包等处,@Target 注解可以指定注解能够被应用于源码中的哪些位置,它可以有如下几种取值:ElementType.ANNOTATION_TYPE:可以给一个注解进行注解;ElementType.CONSTRUCTOR:可以给构造方法进行注解;ElementType.FIELD:可以给属性进行注解;ElementType.LOCAL_VARIABLE:可以给局部变量进行注解;ElementType.METHOD:可以给方法进行注解;ElementType.PACKAGE:可以给一个包进行注解;ElementType.PARAMETER:可以给一个方法内的参数进行注解;ElementType.TYPE:可以给一个类型进行注解,比如类、接口、枚举。例如,我们定义注解@Length只能用在类的属性上,可以添加一个@Target(ElementType.FIELD):import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Length { int min() default 0; int max() default Integer.MAX_VALUE; String message() default "长度不合法";}@Target注解的参数也可以接收一个数组。例如,定义注解@Length可以用在属性或局部变量上:import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE})public @interface Length { int min() default 0; int max() default Integer.MAX_VALUE; String message() default "长度不合法";}至此,我们就完成了 @Length 注解的定义。下面,我们再来看下剩余的两个元注解。3.3.4 @Inherited使用@Inherited定义子类是否可继承父类定义的注解。@Inherited仅针对@Target(ElementType.TYPE)类型的注解有效,并且仅针对类的继承有效,对接口的继承无效:@Inherited@Target(ElementType.TYPE)public @interface TestAnnotation { String value() default "test";}在使用的时候,如果一个类用到了@TestAnnotation:@TestAnnotation("测试注解")public class Pet {}则它的子类默认也定义了该注解:public class Cat extends Pet { }3.3.5 @Repeatable使用@Repeatable这个元注解可以定义注解是否可重复。例如,一个注解用于标注一个人的角色,他可以是学生,也可以是生活委员。@Target(ElementType.TYPE)@Repeatable(Roles.class)public @interface Role { String value() default "";}@Target(ElementType.TYPE)public @interface Roles { Role[] value();}@Repeatable 元注解标注了@Role。而 @Repeatable 后面括号中的类相当于一个容器注解,按照规定,它里面必须要有一个 value 的属性,属性类型是一个被 @Repeatable 注解过的注解数组。经过@Repeatable修饰后,在某个类型声明处,就可以添加多个@Role注解:@Role("学生")@Role("生活委员")public class Student {}
- 2.2 @Autowired 注解 1. 为了测试效果,我们创建 Service 和 Dao 两个类, Dao 作为 Service 的依赖。代码如下://service实现类的代码@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public void saveUser() { System.out.println("执行service中的保存逻辑"); }}//dao实现类的代码@Repositorypublic class UserDaoImpl implements UserDao { public void saveUser() { System.out.println("执行dao的保存方法"); }}代码解释:上面代码可以看到,两个类的实例化方式都是通过注解注入到容器, 并且在 service 实现类中的 userDao 属性上面加了注解 @Autowired。我们首先测试下:能否通过这个注解,实现依赖注入,另外再测试下它是否是按照类型注入。2. 配置文件的内容为注解实现 IoC。配置文件解释: 注解实现 IoC 的章节说过,需要通过组件扫描来实例化容器。3. 编写测试代码public class SpringAnTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); UserService userService = context.getBean(UserService.class); userService.saveUser(); }}测试结果:结果解释可以看到 service 中的代码执行,并且通过 dao 的示例调用的方法也执行了,那么说明 @Autowired 注解实现了属性 userDao 的注入。当然这种操作是小儿科,没有一个同学觉得他有什么。 我们验证下它的特点:set 方法我们是省略了,那么它是否按照类型注入的呢?如果我们的实现类中有多个 userDao 接口的实现类呢,又该如何呢?4. 添加 UserDaoImpl2 一样实现 userDao 的接口,代码如下:@Repositorypublic class UserDaoImpl1 implements UserDao { public void saveUser() { System.out.println("执行dao1的保存方法"); }}测试结果结果解释:可以看到上面控制台打印的异常堆栈信息,清楚的提示错误原因,没有指定的 bean 实例 UserDao 类型的,期待单个 bean 匹配,但是找到了两个。一个是 userDaoImpl 一个是 userDaoImpl1。看到这可以证明: @Autowired 注解是按照类型注入,如果匹配的类型多了就会报错。疑问导出:难道使用了 Spring 框架以后,我们的接口只能有一个实现类吗? 当然不可能,毕竟我们看 Spring 的源码的时候 已经看到了,很多的接口对应一大堆的实现类。那么,针对这种多个接口实例的情况,怎么解决的呢?继续我们注解的学习。
- 2.2 注解作用阐述 1.@Bean 注解的解释:见名知意,此注解作用于方法上,表示方法返回的实例初始化到由 Spring 管理的容器中。其实对现在的我们而言,非常好理解。因为我们知道 Spring 的 IoC 其实就是控制反转,实例化 bean 实例,管理 bean 实例。相当于使用 xml 文件方式的 <bean> 标签,一般来说,此注解出现在被 @Configuration 注释的类中。那么…@Configuration 注解的作用又是什么呢?2.@Configuration 注解的解释:其实看此注解的名称,也能大致猜到它的作用。没错,它的作用就是配置,也就是相当于我们之前编写过很多次的 Spring 配置文件 ——Applicationcontext.xml。之前写过的案例中,Spring 容器的初始化必须加载这个配置文件,而在配置文件中,就包含了很多的 标签,大家没忘记吧?不要提了… 不要关了电脑就忘记之前写过的代码。那么我们上面说 @Bean 标签,一般出现在被此注解注释的类中,就是这个原因。3.@ComponentScan 注解的解释:根据上面两个注解的推断,我们能猜出它的作用就是组件扫描。相当于之前我们在 Spring 的配置文件中用过的标签 context:component-scan,现在讲述使用 JavaConfig 是基于注解的方式,当然也避免不了组件的扫描。此注解也是配置类的组成部分。搭建项目最基本的三个注解给大家介绍过了,下面我们就进入正题。
- 2.3 注解注入规则 刚刚通过三个注解都可以完成了 bean 的实例化注入,通过测试代码也获取到了容器中的三个对象实例,那么这里不知道大家是否发现一个问题:我们知道,Spring 这个容器本质是个 map 集合来存储实例化后的对象。既然是个 map 集合,就应该对应的有 key 和 value。我们都知道 value 肯定是实例化后的 bean ,那么 key 是什么呢?注入规则:1. 四种注解都支持 value 的属性作为自定义的 bean id ;2. 如果 value 属性没有指定,那么默认以类的简单名称(类名首字母小写)作为 bean 对象的 id。所以我们可以看到:当我们只使用注解没有自定义 id 的时候可以通过,每个类的首字母小写来获取对象实例,那么如果有了自定义的 id,上述代码是否继续可用呢?自定义 id 获取实例:改造类上面的注解,设置自定的 id,更改的注解如下:@Controll("uc")@Service("us")@Repository("ud")测试结果:测试结果:为了区分测试结果,我在测试代码中,只修改了 controller 的获取方式,将 id 改成了 uc 。service 和 dao 并没有修改。从控制台打印可以看到,只有 controller 对象可以成功获取,service 和 dao 都失败了,因为我们已经使用了自定义的 id,所以容器中没有默认的以类名作为 id 的 bean 对象实例。
- 3. 定义注解 学会使用注解非常简单,很多框架都会提供丰富的注解文档(例如 Spring)。但关键的一点在于定义注解,知道如何定义注解,才能看懂别人定义的注解。下面我们来定义一个注解。想要定义一个注解,通常可分为 3 步:创建注解;定义注解的参数和默认值;用元注解配置注解。关于这 3 个步骤是什么意思,如何来做,我们下面将来详细讲解。
- 6. 配置项自动注入对象 如果参数很多,一一指定对象属性和配置项的关联非常麻烦。可以通过设定对象与配置项的对应关系,来实现配置项的自动注入。实例:@Component // 注册为组件@EnableConfigurationProperties // 启用配置自动注入功能@ConfigurationProperties(prefix = "wxmp") // 指定类对应的配置项前缀public class WxMpParam { private String appid;// 对应到wxmp.appid private String secret; // 对应到wxmp.secret //省略 get set}在上面的代码中,通过 prefix = "wxmp" 指定了关联配置的前缀,属性 appid 即关联到前缀 + 属性名为 wxmp.appid 的配置项。同理,属性 secret 关联到 wxmp.secret 配置项。
spring注解注入配置相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议