老的EJP網(wǎng)頁開發(fā)模式中燎猛,會牽扯到大量的xml配置龙宏,以至于開發(fā)員的項目維護成本較高玛界。于是IOC技術(shù)也應(yīng)運而生万矾。說到IOC(控制反轉(zhuǎn)),簡單的說就是 通過 配置來創(chuàng)建對象慎框,而不是通過代碼來創(chuàng)建良狈。而Spring則是這個技術(shù)的比較流行的框架之一。下面來介紹下Spring框架的IOC運用實例笨枯。
1. 早期的Spring框架是通過XML配置文件來創(chuàng)建對象薪丁,類似于下面的代碼:
? ? ? // 定義Spring配置文件的路徑
? ? ? ? String xmlPath = "applicationContext.xml";
? ? ? ? // 初始化Spring容器,加載配置文件
? ? ? ? ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
? ? ? ? // 通過容器獲取personDao實例
? ? ? ? PersonDao personDao = (PersonDao) applicationContext.getBean("personDao");
? ? ? ? // 調(diào)用 personDao 的 add ()方法
? ? ? ? personDao.add();
applicationContext.xml里面可以增加一系列需要IOC創(chuàng)建的bean馅精,定義bean的創(chuàng)建細節(jié)严嗜;另外也可以在里面自動scan包名下的所有的對象注入到bean中。
2. 最新的Spring框架 已經(jīng)做到了IOC的零配置洲敢。所謂零配置漫玄,就是不需要xml配置文件,完全通過在java文件中添加注解就可以做到 通過加載配置的方式生成對象压彭。
零配置的步驟如下:
1. 為目標(biāo)類添加上@component睦优, ( 即對應(yīng)著xml中的<bean id=xxxx> )
2. 在相同目錄下創(chuàng)建JavaConfig(類名隨意),為該類添加@ComponentScan的注解哮塞。(即對應(yīng)著xml中的<context:component-scan base-package="包名"/>)
3. 測試程序通過AnnotationConfigApplicationContext來獲取到bean對象刨秆,典型代碼如下:
? ? ? ? ApplicationContext applicationContext = new AnnotationConfigApplicationContext(JavaConfig.class);
? ? ? ? People people = applicationContext.getBean(People.class);
? ? ? ? people.work();
執(zhí)行后打印study
以上即一個極簡的例子,來體驗零配置生成bean的過程忆畅。
Spring Boot的一些常用Component衡未,現(xiàn)將它們的介紹拷貝如下:
1)@Component
可以使用此注解描述 Spring 中的 Bean尸执,但它是一個泛化的概念,僅僅表示一個組件(Bean)缓醋,并且可以作用在任何層次如失。使用時只需將該注解標(biāo)注在相應(yīng)類上即可。
2)@Repository
用于將數(shù)據(jù)訪問層(DAO層)的類標(biāo)識為 Spring 中的 Bean送粱,其功能與 @Component 相同褪贵。
3)@Service
通常作用在業(yè)務(wù)層(Service 層),用于將業(yè)務(wù)層的類標(biāo)識為 Spring 中的 Bean抗俄,其功能與 @Component 相同脆丁。
4)@Controller
通常作用在控制層(如 Struts2 的 Action),用于將控制層的類標(biāo)識為 Spring 中的 Bean动雹,其功能與 @Component 相同槽卫。