前言:
JavaConfig(基于java类进行配置)实现配置和上篇博客说到的xml配置bean是一样的,只不过spring4之后更加推荐javaConfig的方式。
1、注解
(1)@Configuration和@Bean
- @Configuration 的注解类表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源。相当于beans
- @Bean 注解告诉 Spring,一个带有 @Bean 的注解方法将返回一个对象,该对象应该被注册为在 Spring 应用程序上下文中的bean
最简单可行的 @Configuration 类如下所示:
package com.tutorialspoint;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
@Bean
public HelloWorld helloWorld(){
return new HelloWorld();
}
}
上面的代码将等同于下面的 XML 配置:
<beans>
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld" />
</beans>
HelloWorld 的内容:
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
public class MainApp {
public static void main(String[] args) {
ApplicationContext ctx =
new AnnotationConfigApplicationContext(HelloWorldConfig.class);
HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
helloWorld.setMessage("Hello World!");
helloWorld.getMessage();
}
}
结果:
Your Message : hello world
(2)@Import
@import 注解允许从另一个配置类中加载 @Bean 定义。考虑 ConfigA 类,如下所示:
@Configuration
public class ConfigA {
@Bean
public A a() {
return new A();
}
}
你可以在另一个 Bean 声明中导入上述 Bean 声明,如下所示:
@Configuration
@Import(ConfigA.class)
public class ConfigB {
@Bean
public B b() {
return new B();
}
}
现在,当实例化上下文时,不需要同时指定 ConfigA.class 和 ConfigB.class,只有 ConfigB 类需要提供,如下所示:
public static void main(String[] args) {
ApplicationContext ctx =
new AnnotationConfigApplicationContext(ConfigB.class);
// now both beans A and B will be available...
A a = ctx.getBean(A.class);
B b = ctx.getBean(B.class);
}
(3)@Component
三个衍生注解,@Controller, @Service, @Repository,功能都一样,都是将对象注入到Spring容器中,只不过@Controller用在controller层,@Service用在service层,@Repository用在dao层。
(4) @Value注解
给变量赋了初值
(5)@Required 注释
@Required 注释应用于 bean 属性的 setter 方法,@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException
(6) @Qualifier
可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱,因为@Autowired默认是byType。
(7)@PostConstruct 和 @PreDestroy 注释
为了定义一个 bean 的安装和卸载,xml中我们使用 init-method 和/或 destroy-method 参数简单的声明一下 。init-method 属性指定了一个方法,该方法在 bean 的实例化阶段会立即被调用。同样地,destroy-method 指定了一个方法,该方法只在一个 bean 从容器中删除之前被调用。
你可以使用 @PostConstruct 注释作为初始化回调函数的一个替代,@PreDestroy 注释作为销毁回调函数的一个替代
(8) @Resource和@Autowired
@Resource是Java的注解,它遵循 by-name的方式的方式注入
@Resource(name= "spellChecker")
@Autowired是Spring的注解,它遵循 by-type的方式注入
(9) @JsonIgnore
@JsonIgnore
private String password;// 密码
这样在json序列化时,就不会把password返回。