在spring 1.x时代,使用spring开发满眼都是xml配置的bean,随着项目的扩大,
咱们须要把xml配置文件分放到不一样的配置文件中,那时候须要频繁地在开发的类和配置文件间切换。java
在spring 2.x时代,随着JDK1.5带来的注解支持,spring提供了声明bean的注解,
大大减小了配置量。这时spring圈子存在一种争论:注解配置和xml配置究竟哪一个更好?咱们最终的选择是应用
的基本配置用xml,业务配置用户注解。spring
从spring 3.x到如今,spring提供了Java配置的能力,使用Java配置更好的理解
配置的bean。spring 4.x和spring boot都推荐使用Java配置。this
public class FunctionService{ public String sayHello(String word){ return "hello "+ word + " !"; } }
此处没有使用@Service声明为Beancode
// 1 public class UseFunctionService{ @Autowired // 2 FunctionService functionService; public void setFunctionService(FunctionService functionService){ this.functionService = functinService; } public String SayHello(String word){ return functionService.sayHello(word); } }
@Configuration // 1 public class JavaConfig{ @Bean // 2 public FunctionService functionService(){ return new FunctionService(); } @Bean public UseFunctionService useFunctionService(){ UserFunctionService useFunctionService = new UseFunctionService(); useFunctionService.setFunctionService(functionService()); // 3 为UseFunctionService注入functionService return useFunctionService; } }
@Bean public UseFunctionService useFunctioinService(FunctionService functionService){ UserFunctionService useFunctionService = new UseFunctionService(); useFunctionService.setFunctionService(functionService); return useFunctionService; }
public class Main{ public static void main(String[] args){ // 使用注解配置工厂类,指定加载的配置类 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class); UseFunctionService useFunctionService = context.getBean(UseFunctionService.class); System.out.println(useFunctionService.SayHello("java config")); context.close(); } }
不管是xml配置、注解配置仍是Java配置,都被称做元数据,所谓元数据即描述数据的数据。元数据自己不具有任何可执行的能力,
只能经过外界的代码来对这些元数据行进行解析后再进行一些有意义的操做。Spring容器解析这些配置元数据进行Bean初始化、配
置和管理依赖。xml
声明Bean的注解有:开发
注入Bean的注解,通常状况下通用:get
以上三个注解均可注解在set方法或者属性上。it