在spring XML配置中,注解连线在默认情况下不打开,需要在配置中显示配置。
1、@Component
作用:
把资源让spring来管理。相当于在xml中配置一个 bean。相当于:
属性:
value:指定bean的 id。如果不指定value属性,默认bean的id是当前类的类名,首字母小写。
衍生注解:和@Component作用一样,只是提供了更加明确的语义化。
@Controller:一般用于表现层的注解。
@Service:一般用于业务层的注解。
@Repository:一般用于持久层的注解。
2、数据注入注解
相当于:
@Autowired
作用:按照byType注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时,使用要注入的对象变量名称作为bean的id,在spring容器查找,找到了也可以注入成功。找不到就报错。
@Qualifier
在@Autowired注解的基础上,再按照bean的id注入,必须和@Autowire 一起使用。但是给方法参数注入时,可以独立使用。
@Resource
直接按照bean的id注入,相当于byName注入。它也只能注入其他bean类型。
@Value
注入基本数据类型和String类型数据的,常用于配置文件中的属性注入。
3、@Scope
作用:指定bean的作用范围。
取值:singleton、prototype、request、session、globalsession
4、bean生命周期注解
@PostConstruct
作用: 用于指定bean初始化之前的执行方法。
@PreDestroy
作用: 用于指定bean销毁之后的执行方法。
5、@Configuration
作用:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用 AnnotationApplicationContext(有@Configuration 注解的类.class)。
相当于:spring-config.xml配置文件
属性:value用于指定配置类的字节码
6、@ComponentScan
作用:用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的:
是一样的。
属性:basePackages用于指定要扫描的包。和该注解中的value属性作用一样。
7、@Bean
作用:该注解只能写在方法上,用于把当前方法的返回值作为bean对象存入spring的ioc容器中。
属性:name给当前@Bean注解方法创建的对象指定一个名称(即 bean 的 id)。当不写时,默认值是当前方法的名称。
8、@PropertySource
作用:用于加载properties文件中的配置。
属性:value[]用于指定properties文件位置。如果是在类路径下,需要写上classpath。
9、@Import
作用:用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题。
属性:value[]用于指定其他配置类的字节码。
第一步:创建一个maven项目,在pom.xml中导入spring和jar
org.springframework
spring-context
5.2.5.RELEASE
第二步:在resources下创建一个spring_config.properties文件,用于测试@Value注解
spring.config.msg.id=111
spring.config.msg.name=AAA
spring.config.message.id=222
spring.config.message.name=BBB
第三步:创建spring注解的配置文件
PropertiesConfig.java:用于读取spring_config.properties文件中的信息
package com.oysept.config;
import java.util.Properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Scope;
/**
* @PropertySource: 用于加载后缀为".properties"文件中的配置,
* @author ouyangjun
*/
@PropertySource("classpath:spring_config.properties")
public class PropertiesConfig {
/**
* @Value: 获取配置文件中的属性值, 当值不存在时,提供一个默认值
*/
@Value(value="${spring.config.msg.id:0}")
private String firstID;
@Value(value="${spring.config.msg.name:no}")
private String firstName;
@Value(value="${spring.config.message.id:0}")
private String secondID;
@Value(value="${spring.config.message.name:no}")
private String secondName;
@Bean(name="properties_first")
@Scope("singleton")
public Properties createProperties1() {
Properties pro = new Properties();
pro.put(firstID, firstName);
return pro;
}
@Bean(name="properties_second")
@Scope("singleton")
public Properties createProperties2() {
Properties pro = new Properties();
pro.put(secondID, secondName);
return pro;
}
}
SpringConfigXML.java文件,相当于XML中spring-config.xml
package com.oysept.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* @Configuration: 相当于:spring-config.xml配置文件
* @ComponentScan: 相当于:
* @Import: 把其它配置文件导入, 当指定加载SpringConfigXML配置时, 会自动加载其它配置文件
* @author ouyangjun
*/
@Configuration
@ComponentScan("com.oysept")
@Import(PropertiesConfig.class)
public class SpringConfigXML {
}
第四步:创建bean文件
MessageChecker.java
package com.oysept.service;
import org.springframework.stereotype.Component;
/**
* @Component: 相当于:
* @author ouyangjun
*/
@Component
public class MessageChecker {
public void printMessage() {
System.out.println("AnnotationConfig MessageChecker printMessage()!");
}
}
MessageService.java
package com.oysept.service;
import java.util.Properties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
/**
* @Component: 相当于:
* @author ouyangjun
*/
@Component
public class MessageService {
/**
* @Autowired: 相当于:
*/
@Autowired
private MessageChecker messageChecker;
/**
* @Qualifier: 当存在多个bean时, 需指定具体的bean, 如多配置, 多数据源的场景
*/
@Autowired
@Qualifier(value = "properties_second")
private Properties properties;
public void printProperty() {
System.out.println("properties: " + properties);
messageChecker.printMessage();
}
}
第五步:创建测试文件
package com.oysept.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.oysept.config.PropertiesConfig;
import com.oysept.config.SpringConfigXML;
import com.oysept.service.MessageService;
public class MsgTest {
public static void main(String[] args) {
// 方式1.获取容器, 当有多个配置文件时, 如不用@Import注解, 可用该方式注册
//ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfigXML.class, PropertiesConfig.class);
// 方式2.获取容器
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
ac.register(SpringConfigXML.class, PropertiesConfig.class); // 注册配置文件
ac.refresh(); // 刷新配置信息
// 方式3.获取容器
//ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfigXML.class);
// 2.得到业务层对象, 并执行方法
MessageService msgA = ac.getBean(MessageService.class);
msgA.printProperty();
}
}
打印效果图:
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!