Spring框架的四大原則
1)使用POJO進(jìn)行輕量級和最小侵入式開發(fā)。
2)通過依賴注入和接口編程實(shí)現(xiàn)松耦合。
3)通過AOP和默認(rèn)習(xí)慣進(jìn)行聲明式編程。
4)使用AOP和模板(template)減少模塊化代碼。
一、概念
控制反轉(zhuǎn)(Inversion of Control-IOC)== 依賴注入(dependency injection-DI)
控制反轉(zhuǎn)是通過依賴注入實(shí)現(xiàn)的。
Spring IOC容器(ApplicationContext)負(fù)責(zé)創(chuàng)建Bean,并通過容器將功能類Bean注入到需要的Bean中。
所謂依賴注入是指通過spring容器負(fù)責(zé)創(chuàng)建對象和維護(hù)對象之間的關(guān)系;而不是傳統(tǒng)模式對象本身通過new自身創(chuàng)建和解決自身依賴關(guān)系。
Spring提供使用XML、注解、Java配置、groovy配置實(shí)現(xiàn)Bean的創(chuàng)建和注入。
拓展:XML、注解、Java配置。都被稱為配置元數(shù)據(jù),所謂元數(shù)據(jù)即描述數(shù)據(jù)的數(shù)據(jù)(這就是所謂的配置)。其本身并不具備任何執(zhí)行能力,只能通過外界代碼來解析這些元數(shù)據(jù)進(jìn)行有意義的操作;比如spring容器解析這些配置數(shù)據(jù)進(jìn)行Bean的初始化、配置、管理、注入。。。
二、幾個(gè)相關(guān)注解
1)聲明Bean的注解:(以下注解是等效的 根據(jù)需求選用)
@Component 組件,沒有明確的角色。
@Service 在業(yè)務(wù)邏輯層(service層)使用。
@Repository在數(shù)據(jù)訪問層(dao層)使用。
@Controller在展示層(MVC——>SpringMVC)使用。
2)注入Bean的注解:(以下注解是等效的 根據(jù)需求選用)
@Autowired Spring提供的注解。
@Inject JSR-330提供的注解。
@Resource JSR-250提供的注解。
三、Demo
(1)功能類的Bean(以下是代碼塊: ? ?(⊙﹏⊙)b體諒一下 ?還不會用代碼塊)
package com.springioc.test;
import org.springframework.stereotype.Service;
//聲明FunctionService這個(gè)類是Spring管理的一個(gè)Bean
@Service
public class FunctionService(){
? ?public String printHappy(String UesrName){
? ? ? ? return UesrName+"Success, good fun!";
? ? }
}
(2)使用功能類的Bean(以下是代碼塊:? ? (⊙﹏⊙)b體諒一下? 還不會用代碼塊)
package com.springioc.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//聲明FunctionService這個(gè)類是Spring管理的一個(gè)Bean
@Service
public class UseFunctionService(){
//將FunctionService實(shí)體Bean注入到本(UseFunctionService)Bean中,
//使其具備FunctionService這個(gè)Bean 的功能
@Autowired?
?FunctionService functionService
? ? public String printHappy(String UesrName){
? ? ? ? return functionService.printHappy(UesrName);
? ? }
}
(3)配置類(以下是代碼塊:? ? (⊙﹏⊙)b體諒一下? 還不會用代碼塊)
package com.springioc.test;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
//聲明Config這個(gè)類是一個(gè)配置類(詳情見后一節(jié))
@Configuration
//使用@ComponentScan,自動掃描com.springioc.test此包名下所有@Service、
//@Component、@Repository、@Controller的類,并對其實(shí)例化。
@ComponentScan("com.springioc.test")
public class Config(){
}
(4)運(yùn)行main方法
package com.springioc.test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main(){
? ? public static void main(String[] args){
//使用Spring? AnnotationConfigApplicationContext容器讀取Config這個(gè)配置類
AnnotationConfigApplicationContext comtext = new ? ? ? ? ? ? AnnotationConfigApplicationContext(Config.class);
//獲取context容器中的實(shí)例化Bean? UseFunctionService
UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
system.out.println(useFunctionService.printHappy("冉玉琦"));
context.close();
}
}