在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