Spring注解配置实现过程详解

配置注解的支持:

在spring4之后,想要使用注解形式,必须得要引入 aop 的包

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aop</artifactId>
	<version>5.2.8.RELEASE</version>
</dependency>

导入 context 的约束,增加注解的支持:

<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd">

  <context:annotation-config/>
</beans>

配置扫描指定包下的注解

<!--指定注解扫描包-->
<context:component-scan base-package="com.lf.pojo"/>

常用注解说明

自动装配注解

  • @Autowired:自动装配,其作用是为了消除Java代码中的getter/setter方法和bean中的property属性。其中是否消除getter程序需求,若需要对外提供私有属性,则应当保留

    • @Autowired是按类型自动转配的,不支持id匹配
    • 需要导入 spring-aop 包
    • 如果@Autowired不能唯一自动装配上属性则需要通过 @Resource(value="xxx")
  • @Qualifier :如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称
    • @Autowired是根据类型byType自动装配的,若加上@Qualifier则可以根据byName的方式自动装配
    • @Qualifier不能单独使用
  • @Resource:自动装配,通过名字,类型。与@Autowired注解作用非常相似
  • @Autowired与@Resource异同总结:
    • @Autowired与@Resource都可以用来装配bean。都可以写在字段上,或写在setter方法上
    • @Autowired默认按类型装配(属于spring规范),默认情况下要求依赖对象必须存在,若要允许null 值,则可以设置它的required属性为false,如:@Autowired(required=false) ,如果想使用名称装配可以结合@Qualifier注解使用
    • @Resource默认按照名称装配,名称可以通过name属性进行指定。若未指定name属性,当注解位于字段上时,会默认按字段名通过名称查找;若注解写在 setter方法上则默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但需要注意的是:name属性一旦指定,就只会按照名称进行装配
    • 它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired 先 byType,@Resource 先 byName

Bean的实现

@Component:它的作用就是实现bean的注入,@Component 注解可以放在类的上面,但@Component不推荐使用

Spring提供了更加细化的注解形式:@Repository、@Service、@Controller,它们分别对应存储层Bean,业务层 Bean,和展示层Bean。因此推荐使用它们来替代@Component

属性注入

使用注解注入属性

可以不用提供set方法,直接在直接名上添加@value("值")

@Component("user")
// 相当于配置文件中
public class User {
@Value("Java")
// 相当于配置文件中
public String name;
}
```

如果提供了set方法,在set方法上添加@value("值")

@Component("user")
public class User {
  public String name;
  @Value("Java")
  public void setName(String name) {
    this.name = name;
  }
}

衍生注解

@Component的三个衍生注解

为了更好的进行分层,Spring可以使用其它三个注解,其功能一样,都是代表将某个类注册到spring中,装配Bean

@Controller:web层
@Service:service层
@Repository:dao层

作用域

@scope

  • singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁
  • prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收

@Controller("user") @Scope("prototype") public class User { @Value("秦疆") public String name; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • spring aop注解配置代码实例

    本文实例为大家分享了spring aop注解配置的具体代码,供大家参考,具体内容如下 Demo.java package cn.itcast.e_annotation; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.ApplicationContext; import org.springfra

  • SpringAOP中的注解配置详解

    这篇文章主要介绍了SpringAOP中的注解配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用注解实现SpringAOP的功能: 例子: //表示这是被注入Spring容器中的 @Component //表示这是个切面类 @Aspect public class AnnotationHandler { /* * 在一个方法上面加上注解来定义切入点 * 这个切入点的名字就是这个方法的名字 * 这个方法本身不需要有什么作用 * 这个方法的

  • Spring纯注解配置实现代码示例解析

    问题 我们发现,之所以我们现在离不开 xml 配置文件,是因为我们有一句很关键的配置: <!-- 告知spring框架在,读取配置文件,创建容器时,扫描注解,依据注解创建对象,并存入容器中 --> <context:component-scan base-package="com.itheima"></context:component-scan> 如果他要也能用注解配置,那么我们就离脱离 xml 文件又进了一步. 另外,数据源和 JdbcTempl

  • Spring @Profile注解实现多环境配置

    一 前言 springboot中使用多环境开发如此简单,你想知道spring中是如何实现的么?一起来学习吧!!你为什么不好好学习基础,面试一直被diss呢?说到底还不是你认为都会了,其实你都不会,一问三不知!! 二 @profile实现多环境配置 2.1 @profile配置 使用@profile注解的目的是未了多环境开发,比如开发环境使用dev, 生产环境使用prod,就可以使用@Profile注解实现不同的开发环境使用不同的数据源: @profile注解 使用说明: spring3.2之前

  • Spring @Bean注解配置及使用方法解析

    使用说明 这个注解主要用在方法上,声明当前方法体中包含了最终产生 bean 实例的逻辑,方法的返回值是一个 Bean.这个 bean 会被 Spring 加入到容器中进行管理,默认情况下 bean 的命名就是使用了 bean 注解的方法名.@Bean 一般和 @Component 或者 @Configuration 一起使用. @Bean 显式声明了类与 bean 之间的对应关系,并且允许用户按照实际需要创建和配置 bean 实例. 该注解相当于: <bean id="useService

  • spring-boot通过@Scheduled配置定时任务及定时任务@Scheduled注解的方法

    串行的定时任务 @Component public class ScheduledTimer { private Logger logger = Logger.getLogger(this.getClass()); /** * 定时任务,1分钟执行1次,更新潜在客户超时客户共享状态 */ @Scheduled(cron="0 0/1 8-20 * * ?") public void executeUpdateCuTask() { Thread current = Thread.curr

  • springmvc注解配置实现解析

    springmvc大大减少了对xml的配置,减少了配置量,以及可以在一个controller类中进行多个请求配置 一.springmvc配置 context:component-scan 开启包扫描,对指定的包进行注解扫描 mvc:annotation-driven开启注解功能 二.controller配置 在类上加上@Controller 在指定的方法上@RequestMapping("/t请求名") 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • Spring通过配置文件和注解实现属性赋值

    前言 在实际开发当中,Spring中bean的属性直接赋值用的不是太多,整理这方面的资料,做一个小结,以备后续更深入的学习. 通过配置文件的方式 以配置文件的方式启动spring容器时,可以使用property标签的value给bean的属性赋值,赋值的形式有以下几种: <--通过context:property-placeholder将properties文件中的值加载的环境变量中(properties中的属性值最终是以环境变量的形式存储的)> <context:property-pl

  • Spring注解配置实现过程详解

    配置注解的支持: 在spring4之后,想要使用注解形式,必须得要引入 aop 的包 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.2.8.RELEASE</version> </dependency> 导入 context 的约束,增加注解的支持: <?

  • Spring基于xml文件配置Bean过程详解

    这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过全类名来配置: class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求bean中必须有一个无参的构造器. <bean id="helloWorld" class="com.gong.spring.beans.HelloWorld"> <property na

  • Spring cloud config集成过程详解

    这篇文章主要介绍了spring cloud config集成过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring Cloud Config 分为 Config Server: 分布式配置中心,是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息 Config Client: 通过指定配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息 Spring boot版本2.1.8.

  • spring整合Quartz框架过程详解

    这篇文章主要介绍了spring整合Quartz框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.Quartz框架简介 Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间.其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性.主要用来执行定时任务,如:定时发送信息.定时生成报表等等. Quartz框架的主要特点: · 强大的调度功能,例如丰富多样的

  • struts2中使用注解配置Action方法详解

    使用注解来配置Action可以实现零配置,零配置将从基于纯XML的配置转化为基于注解的配置.使用注解,可以在大多数情况下避免使用struts.xml文件来进行配置. struts2框架提供了四个与Action相关的注解类型,分别为ParentPackage.Namespace.Result和Action. ParentPackage:ParentPackage注解用于指定Action所在的包要继承的父包.该注解只有一个value参数.用于指定要继承的父包. 示例: 使用ParentPackage

  • Django加载配置的过程详解

    目录 一. Django服务启动 manage.py 二. 引入配置 三. 加载配置 一. Django服务启动 manage.py os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ui.settings") 设置配置文件环境变量- #!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.se

  • 详解spring注解配置启动过程

    最近看起spring源码,突然想知道没有web.xml的配置,spring是怎么通过一个继承于AbstractAnnotationConfigDispatcherServletInitializer的类来启动自己的.鉴于能力有限以及第一次看源码和发博客,不到之处请望谅~ 我用的IDE是IntelliJ IDEA,这个比myEclipse看源码方便一点,而且黑色背景挺喜欢.然后项目是在maven下的tomcat7插件运行.spring版本是4.3.2.RELEASE. 如果写过纯注解配置的spri

  • spring boot 配置动态刷新实现详解

    本文测试使用的spring cloud版本为: Dalston.SR1 很多朋友只知道spring cloud config可以刷新远程git的配置到内存中, 却不知道spring cloud config的客户端可以脱离服务端使用, 更不知道spring cloud config客户端结合actuator还可以刷新本地的配置文件到内存中. 具体做法如下: 1.pom: <?xml version="1.0" encoding="UTF-8"?> <

  • springboot配置redis过程详解

    在springboot中,默认继承好了一套完好的redis包,可以直接使用,但是如果使用中出了错不容易找到错误的原因,因此这里使用自己配置的redis: 需要使用的三个主要jar包: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>

  • Spring整合mybatis实现过程详解

    增加了用于处理MyBatis的两个bean:SqlSessionFactoryBean.MapperFactoryBean 1.注册SqlSessionFactoryBean: (1)实现 InitializingBean:调用其afterPropertiesSet方法(this.sqlSessionFactory = buildSqlSessionFactory()) 目的就是对于sqlSessionFactory的初始化. (2)FactoryBean:getBean方法获取bean(= 获

随机推荐