Spring注释
Spring Annotations允许我们配置依赖关系并通过java程序实现依赖关系注入。
Spring注释
Spring框架实现并促进了控制反转(IOC)或者依赖项注入(DI)的原理,并且实际上是IOC容器。
传统上,Spring允许开发人员通过使用基于XML的配置来管理Bean依赖项。
有另一种定义bean及其依赖项的方法。
此方法是基于Java的配置。与XML方法不同,基于Java的配置允许您以编程方式管理bean组件。
这就是引入Spring注释的原因。
在本文中,我们将探讨最常用的Spring注释,并查看一些示例程序。
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类时可以使用它。
例如;@ComponentScan:配置与@Configuration类一起使用的组件扫描指令。
其中我们可以指定基本软件包以扫描弹簧组件。@Component:指示带注释的类是"组件"。
当使用基于注释的配置和类路径扫描时,此类将被视为自动检测的候选。@PropertySource ::提供了一种简单的声明机制,用于向Spring的环境中添加属性源。
添加属性源文件数组也有类似的注释,即@PropertySources。@Service:表示带注释的类是"服务"。
此批注用作@Component的特化,允许通过类路径扫描自动检测实现类。@Repository:指示带注释的类是"存储库"。
此批注用作@Component的特殊化,建议与DAO类一起使用。@Autowired:Spring @Autowired注解用于自动注入bean。
当我们为相同类型配置了两个以上的bean时,Spring @Qualifier注释与Autowired一起使用可以避免混淆。
Spring MVC注释
一些重要的Spring MVC注释是:
- @Controller
- @RequestMapping
- @PathVariable
- @RequestParam
- @ModelAttribute
- @RequestBody和@ResponseBody
- @RequestHeader和@ResponseHeader
您可以在Spring MVC教程中了解有关它们的更多信息。
Spring交易管理注释
@Transactional是Spring声明式事务管理注释,更多内容请参见Spring MVC Hibernate。
Spring安全性注释
@EnableWebSecurity与@Configuration类一起使用以定义Spring Security配置,有关更多信息,请参见Spring Security Example。
Spring Boot注释
- @SpringBootApplication
- @EnableAutoConfiguration
在Spring Boot Example中阅读更多信息。
弹簧注释示例
让我们看一个简单的示例,在该示例中,我们将在应用程序中使用Spring注释。
下图说明了我的Spring Annotations Example项目。
Spring框架依赖
我已经创建了maven项目并添加了Spring Core Framework依赖项。
public class Computer {
@PostConstruct
public void turnOn(){
System.out.println("Load operating system");
}
@PreDestroy
public void turnOff(){
System.out.println("Close all programs");
}
}
这将拉起我们项目的所有弹簧芯罐。
组件类别
下一步是创建组件类。
其中我在模仿多个数据库组件,一个用于MySQL,另一个用于Oracle。
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.theitroad.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>
" DataBaseDriver"是我们将要实现的基本接口。
package com.theitroad.drivers;
public interface DataBaseDriver {
public String getInfo();
}
注意使用@Component批注来指示spring框架将此类视为Component。
我们还使用了@PropertySource和@Value注释,Spring将在运行时使用它们来注入和设置来自指定属性文件的这些变量值。
以下是在mysqldatabase.properties文件中声明的属性。
package com.theitroad.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 +
" ]";
}
}
databaseName=school disableStatementPooling=true
OracleDriver是一个简单的bean,我们将使用服务类向该bean注入属性。
Spring服务班
package com.theitroad.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 +
" ] ";
}
}
其中我们使用@Service批注来指示Spring框架将其视为Service类。
然后我们使用@Autowired和@Qualifier(" oracleDriver")批注告诉Spring框架将名为" oracleDriver"的bean注入类属性" dataBaseDriver"。
请注意,我们尚未创建此Spring bean。
spring bean
最后一步是创建我们的spring bean和配置类,以将所有内容粘合在一起。
package com.theitroad.service;
import com.theitroad.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();
}
}
注意" oracleDriver"的bean定义。
在这种方法中,我们从" oracledatabase.properties"文件中读取属性,该文件已被Spring框架设置为" environment"变量。
这是在oracledatabase.properties文件中定义的属性。
package com.theitroad.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.theitroad.drivers.DataBaseDriver;
import com.theitroad.drivers.MySqlDriver;
import com.theitroad.drivers.OracleDriver;
@Configuration
@ComponentScan("com.theitroad")
@PropertySource("classpath:oracledatabase.properties")
public class AppConfig {
@Autowired
Environment environment;
@Bean
DataBaseDriver 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;
}
@Bean
DataBaseDriver mysqlDriver() {
return new MySqlDriver();
}
}
我们的spring注释示例项目已准备好进行测试。
作为总结,我们执行了以下步骤:
创建了maven项目并添加了必需的spring依赖项。
创建了组件类,并将资源文件中的属性注入到其变量中。
如果我们有第三方组件,则可以使用Service类将依赖项注入其中。
就像我们通过UserService类为OracleDriver所做的一样。最后,我们创建了Configuration类来定义spring bean,并将基本包设置为扫描spring组件类并对其进行配置。
Spring注释示例测试
这是测试Spring注释示例项目的主要类。
db.url=localhost db.port=4444 db.user=vasiliy db.password=yilisav db.driver=driver_name
请注意,我们尚未配置任何日志记录框架,因此所有spring框架日志记录都将以红色打印到控制台中。

