Spring 注解教程
Spring 注解教程
Spring Annotations允许我们通过java程序配置依赖项并实现依赖项注入。
目录[ 隐藏 ]
- 1 Spring注释
- 1.1 Spring注释列表
- 1.2 Spring MVC注释
- 1.3 Spring事务管理注释
- 1.4 Spring安全注释
- 1.5 Spring Boot Annotations
- 1.6 Spring注释示例
- 1.6.1 Spring框架依赖关系
- 1.6.2 组件类
- 1.6.3 Spring 服务类
- 1.6.4 Spring Bean
- 1.7 Spring注释示例测试
Spring 注解
- Spring框架实现并提升了控制反转(IOC)或依赖注入(DI)的原理,实际上是一个IOC容器。
- 传统上,Spring允许开发人员使用基于XML的配置来管理bean依赖关系。
- 还有另一种方法来定义bean及其依赖项。此方法是基于Java的配置。
- 与XML方法不同,基于Java的配置允许您以编程方式管理bean组件。这就是为什么引入Spring注释的原因。
在本文中,我们将探讨最常用的Spring Annotations,并查看一些示例程序。
Spring注释列表
一些Spring核心框架注释是:
@Configuration
:用于指示类声明一个或多个@Bean
方法。这些类由Spring容器处理,以在运行时为这些bean生成bean定义和服务请求。@Bean
:表示方法生成由Spring容器管理的bean。这是最常用和最重要的弹簧注释之一。@Bean注释也可以与name,initMethod和destroyMethod等参数一起使用。- name - 允许你给bean命名
- initMethod - 允许您选择将在上下文寄存器上调用的方法
- destroyMethod - 允许您选择将在上下文关闭时调用的方法
例如:
@Configuration public class AppConfig {@Bean(name = "comp", initMethod = "turnOn", destroyMethod = "turnOff")Computer computer(){return new Computer();} }
public class Computer {public void turnOn(){System.out.println("Load operating system");}public void turnOff(){System.out.println("Close all programs");} }
@PreDestroy
并且@PostConstruct
是bean initMethod和destroyMethod的替代方法。它可以在我们定义bean类时使用。例如;public class Computer {@PostConstructpublic void turnOn(){System.out.println("Load operating system");}@PreDestroypublic void turnOff(){System.out.println("Close all programs");} }
@ComponentScan
:配置组件扫描指令以与@Configuration类一起使用。在这里,我们可以指定扫描spring组件的基础包。@Component
:表示带注释的类是“组件”。当使用基于注释的配置和类路径扫描时,这些类被视为自动检测的候选者。@PropertySource
:提供了一个简单的声明机制,用于向Spring的Environment添加属性源。添加属性源文件数组有一个类似的注释,即@PropertySources
。@Service
:表示带注释的类是“服务”。此注释用作@Component的特化,允许通过类路径扫描自动检测实现类。@Repository
:表示带注释的类是“存储库”。此注释用作@Component的特化,并且建议与DAO类一起使用。@Autowired
:Spring @Autowired注释用于自动注入bean。Spring @Qualifier注释与Autowired结合使用,以避免在我们为同一类型配置两个bean时出现混淆。
Spring MVC Annotations
一些重要的Spring MVC注释是:
- @Controller
- @RequestMapping
- @PathVariable
- @RequestParam
- @ModelAttribute
- @RequestBody和@ResponseBody
- @RequestHeader和@ResponseHeader
您可以在Spring MVC Tutorial中了解更多相关信息。
Spring Transaction Management Annotations
@Transactional
是Spring声明式事务管理注释,在Spring MVC Hibernate上内容。
Spring安全注释
@EnableWebSecurity
与@Configuration类一起使用以定义Spring Security配置,在Spring Security Example中内容。
Spring Boot Annotations
- @SpringBootApplication
- @EnableAutoConfiguration
Spring Boot示例。
Spring注释示例
让我们看一个简单的例子,我们将在我们的应用程序中使用Spring注释。下图说明了我的Spring Annotations Example项目。
Spring框架依赖关系
我创建了maven项目并添加了Spring Core Framework依赖项。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.journaldev.spring</groupId><artifactId>spring-annotations</artifactId><version>0.0.1-SNAPSHOT</version><name>Spring Annotations</name><properties><spring.framework>4.3.0.RELEASE</spring.framework></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.framework}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.framework}</version></dependency></dependencies></project>
这将为我们的项目提供所有弹簧核心罐。
组件类
下一步是创建组件类。在这里,我模仿多个数据库组件,一个用于MySQL,另一个用于Oracle。
package com.journaldev.drivers;public interface DataBaseDriver {public String getInfo();
}
DataBaseDriver
是我们将实现的基本接口。
package com.journaldev.drivers;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component
@PropertySource("classpath:mysqldatabase.properties")
public class MySqlDriver implements DataBaseDriver {@Value("${databaseName}")private String databaseName;@Value("${disableStatementPooling}")private String disableStatementPooling;public String getInfo() {return "[ Driver: mySql" +", databaseName: " + databaseName +", disableStatementPooling: " + disableStatementPooling +" ]";}
}
请注意使用@Component
注释来指示spring框架将此类视为Component。我们也在使用@PropertySource
和@Value
注释,Spring将在运行时使用这些来从指定的属性文件中注入和设置这些变量值。下面是mysqldatabase.properties
文件中声明的属性。
databaseName=school
disableStatementPooling=true
package com.journaldev.drivers;public class OracleDriver implements DataBaseDriver {protected String url;protected String user;protected String password;protected String driver;protected Integer port;public String getUrl() {return url;}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDriver() {return driver;}public void setDriver(String driver) {this.driver = driver;}public Integer getPort() {return port;}public void setPort(Integer port) {this.port = port;}public void setUrl(String url) {this.url = url;}public String getInfo() {return "[ Driver: Oracle" +", url: " + url +", port; " + port +", user: " + user +", password: " + password +", driver: " + driver +" ] ";}
}
OracleDriver
是一个简单的bean,我们将使用服务类为这个bean注入属性。
春季服务类
package com.journaldev.service;import com.journaldev.drivers.DataBaseDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowired@Qualifier("oracleDriver")private DataBaseDriver dataBaseDriver;public String getDriverInfo(){return dataBaseDriver.getInfo();}
}
这里我们使用@Service
注释来指示Spring框架将其视为Service类。然后我们使用@Autowired
和@Qualifier("oracleDriver")
注释告诉spring框架注入名为oracleDriver
class属性的bean dataBaseDriver
。请注意,我们还没有创建这个spring bean。
春豆
最后一步是创建我们的spring bean和配置类,将所有内容粘合在一起。
package com.journaldev.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;import com.journaldev.drivers.DataBaseDriver;
import com.journaldev.drivers.MySqlDriver;
import com.journaldev.drivers.OracleDriver;@Configuration
@ComponentScan("com.journaldev")
@PropertySource("classpath:oracledatabase.properties")
public class AppConfig {@AutowiredEnvironment environment;@BeanDataBaseDriver oracleDriver() {OracleDriver oracleDriver = new OracleDriver();oracleDriver.setDriver(environment.getProperty("db.driver"));oracleDriver.setUrl(environment.getProperty("db.url"));oracleDriver.setPort(Integer.parseInt(environment.getProperty("db.port")));oracleDriver.setUser(environment.getProperty("db.user"));oracleDriver.setPassword(environment.getProperty("db.password"));return oracleDriver;}@BeanDataBaseDriver mysqlDriver() {return new MySqlDriver();}
}
注意bean的定义oracleDriver
。在这个方法中,我们正在从Spring框架中oracledatabase.properties
设置为environment
变量的文件中读取属性。
这是oracledatabase.properties
文件中定义的属性。
db.url=localhost
db.port=4444
db.user=vasiliy
db.password=yilisav
db.driver=driver_name
我们的spring注释示例项目已准备好进行测试。作为总结,我们执行了以下步骤:
- 创建了maven项目并添加了所需的spring依赖项。
- 创建组件类并将资源文件中的属性注入其变量中。
- 如果我们有第三方组件,我们可以使用Service类将依赖项注入其中。就像我们通过UserService类为OracleDriver所做的那样。
- 最后,我们创建了Configuration类来定义spring bean并设置基本包以扫描spring组件类并对其进行配置。
Spring Annotations示例测试
这是我们测试Spring annotations示例项目的主要类。
package com.journaldev;import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;import com.journaldev.config.AppConfig;
import com.journaldev.drivers.DataBaseDriver;
import com.journaldev.service.UserService;public class Main {public static void main(String[] args) {AbstractApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class);DataBaseDriver oracle = appContext.getBean("oracleDriver", DataBaseDriver.class);DataBaseDriver mysql = appContext.getBean("mysqlDriver", DataBaseDriver.class);System.out.println("Oracle driver info:");System.out.println(oracle.getInfo());System.out.println("MySQL driver info:");System.out.println(mysql.getInfo());System.out.println("UserService Information");UserService userService = appContext.getBean(UserService.class);System.out.println(userService.getDriverInfo());appContext.close();}
}
下图显示了产生的输出。请注意,我们尚未配置任何日志记录框架,因此所有spring框架日志记录都将以红色打印到控制台中。
这就是春季注释的简要介绍。我在这里列出了大部分重要的注释,但是对于特定的任务有更多的注释。您可以从下面的链接下载我的spring annotations示例项目。
下载下载Spring Annotations示例项目
参考:API Doc
Spring 注解教程相关推荐
- java spring注解教程,spring注解
spring注解 扫描指定的包中的类上的注解,常用的注解有: @Controller 声明Action组件 @Service 声明Service组件 @Service("myMo ...
- 关于Spring注解开发教程,打包全送你
摘要:spring是我们web开发中必不可少的一个框架,基于传统的xml方式配置bean总觉得太过繁琐,从spring2.5之后注解的出现可以大大简化我们的配置. 本文分享自华为云社区<如何高效 ...
- Spring注解--@Value--使用/教程/实例
原文网址:Spring注解--@Value--使用/教程/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍SpringBoot的@Value的用法. 等效的方法 也可以通过如下方法获 ...
- Spring自学教程-注解的使用(三)
一.java中的注解 定义注解 下面是一个定义注解的实例. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...
- 0、Spring 注解驱动开发
0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...
- 2017.3.31 spring mvc教程(六)转发、重定向、ajax请求
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 最新 Spring 系列教程,都在这了
转载自 最新 Spring 系列教程,都在这了 Spring Boot 系列 什么是 Spring Boot? 公司不用 Spring Boot,果断离职了! 告诉你,Spring Boot 真是个 ...
- Spring Batch教程–最终指南
这是Spring批处理教程,它是Spring框架的一部分. Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动, ...
- java注解 源码_详解Java注解教程及自定义注解
详解Java注解教程及自定义注解 更新时间:2016-02-26 11:47:06 作者:佚名 我要评论(0) Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个 ...
最新文章
- 广度优先搜索(BreadthFirstSearch) 迪克斯特拉算法 (Dijkstra's algorithm)
- 深度解密Go语言之pprof
- php重载父类属性,子类重写父类属性的问题。。。。求解惑
- 用计算机视频,如何用计算机做视频
- ASP.NET取用户浏览器IP地址等信息
- 基于React的可编辑在线简历模板
- 利用Visio DIY自己的示意图
- Django搭建后台管理系统
- vue项目中使用百度离线地图(最新全面爬坑版)
- Excel时间段计算的相关公式
- 计算机图形学——Liang-Barsky算法
- 个人数据泄露问题的数据_非个人的个人数据
- 汇编笔记转自编程达人
- 数据采集的方法有哪些
- 计算机组成原理实验信号cpu,计算机组成原理实验43_实验报告
- html鼠标移除的效果,css实现鼠标移入移出动态效果
- 微服务框架 SpringCloud微服务架构 27 自动补全 27.2 自定义分词器
- PAT (Basic Level) 1018 锤子剪刀布 (20 point(s))
- 高血压补钾降压该咋吃
- 数据库的基本操作(期末复习大全)
热门文章
- WorldCat Search : PHP OCLC Web Services Library
- 图解SQL inner join、left join、right join、full outer join、union、union all的区别
- linux(十三)之磁盘分区、创建文件系统、挂载
- SQL Server2008数据库用户管理 (第三部分)
- 数据挖掘--挖掘建模-时序模式-ARIMA模型
- 草稿 断开式绑定combobox 1128
- linux-用户与组的概念
- jquery-入门-基本使用-选择器-转移
- The setting logImpl is not known
- ubuntu修改默认系统启动项