目錄
-
1. Spring開源框架的簡介
-
2. Spring下IOC容器和DI(依賴注入Dependency injection)
一、Spring開源框架的簡介
Spring是一個開源框架,也是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson
在其著作《Expert One-On-One J2EE Development and Design》中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的複雜性而建立的。
Spring使用基本的JavaBean
來完成以前只可能由EJB
完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。
spring的基本框架主要包含六大模組:DAO
、ORM
、AOP
、JEE
、WEB
、CORE
。
Spring DAO
:Spring提供了對JDBC的操作支援:JdbcTemplate模板工具類 。
Spring ORM
:Spring可以與ORM框架整合。例如Spring整合Hibernate框架,其中Spring還提供HibernateDaoSupport工具類,簡化了Hibernate的操作 。
Spring WEB
:Spring提供了對Struts、Springmvc的支援,支援WEB開發。與此同時Spring自身也提供了基於MVC的解決方案 。
Spring AOP
:Spring提供面向切面的程式設計,可以給某一層提供事務管理,例如在Service層新增事物控制 。
Spring JEE
:J2EE開發規範的支援,例如EJB 。
Spring Core
:提供IOC容器物件的建立和處理依賴物件關係 。
二、Spring下IOC容器和DI(依賴注入Dependency injection)
IOC容器:就是具有依賴注入功能的容器,是可以建立物件的容器,IOC容器負責例項化、定位、配置應用程式中的物件及建立這些物件間的依賴。通常new一個例項,控制權由程式設計師控制,而"控制反轉"是指new例項工作不由程式設計師來做而是交給Spring容器來做。。在Spring中BeanFactory是IOC容器的實際代表者。
DI(依賴注入Dependency injection) :在容器建立物件後,處理物件的依賴關係。
依賴注入spring的注入方式:
- set注入方式
- 靜態工廠注入方式
- 構造方法注入方式
- 基於註解的方式
1、set注入方式:
控制層程式碼:
private OrderServiceImp orderService;
public void setOrderService(OrderServiceImp orderService) {
this.orderService = orderService;
}
複製程式碼
Spring配置XML
檔案:其中配置宣告OrderAction
類存在屬性orderService。程式執行時候,會將已經例項化的orderService物件呼叫setOrderService方式注入。
<bean name="orderAction" class="com.pec.action.OrderAction">
<property name="orderService" ref="orderService"></property>
</bean>
<bean name="orderService" class="com.pec.service.imp.OrderServiceImp"></bean>
複製程式碼
2、構造器注入方式:
控制層程式碼:
private OrderServiceImp orderService;
public OrderAction(OrderServiceImp orderService) {
this.orderService = orderService;
}
複製程式碼
Spring配置XML
檔案:
<bean name="orderAction" class="com.pec.action.OrderAction">
<constructor-arg ref="orderService"></constructor-arg>
</bean>
<bean name="orderService" class="com.pec.service.imp.OrderServiceImp"></bean>
複製程式碼
3、基於註解的方式(推薦使用,比較便捷少配置
)
控制層程式碼:
@Autowired //@Resource
private OrderServiceImp orderService;
複製程式碼
服務層程式碼:
@Service("orderService")
public class OrderServiceImp implements IOrderService {
@Autowired
private JavaOrderMDaoImp javaOrderMDao;
@Autowired
private JavaOrderDDaoImp javaOrderDDao;
@Override
public List<JavaOrderMList> findOrderM(OrderSearch search) {
return javaOrderMDao.findJavaOrderM(search);
}
@Override
public List<JavaOrderDList> findOrderD(OrderSearch search) {
return javaOrderDDao.findJavaOrderD(search);
}
}
複製程式碼
DAO
層程式碼:
@Repository("javaOrderMDao")
public class JavaOrderMDaoImp extends BaseHibernateDAO<JavaOrderM, Serializable> implements IJavaOrderMDao {...}
複製程式碼
@Repository("javaOrderDDao")
public class JavaOrderDDaoImp extendsBaseHibernateDAO<JavaOrderD, Serializable> implements IJavaOrderDDao {...}
複製程式碼
注意點:
⑴ 持久層DAO層註解Repository中規定了名稱,在Service層中宣告名稱必須一致。
⑵ 服務層Service層註解Service中規定了名稱,在控制層中宣告的名稱必須一致。
⑶ 註解方式注入依賴註解:
學習永不止步,在看到這篇文章之前可能你對IOC容器的理解沒有這麼深,所以說學習更重要的是一個氛圍和對比,知道別人有多牛逼,才會發現自己有多low筆。 因此我給大家推薦一個Java架構群:895244712
,裡面有分散式,微服務,效能優化等技術點底層原理的視訊,也有眾多想要提升的小夥伴討論技術,歡迎大家加群一起交流學習。
@Component 把物件加入ioc容器,物件引用名稱是類名,第一個字母小寫
@Component(“name”) 把指定名稱的物件,加入ioc容器
@Repository 主要用於標識加入容器的物件是一個持久層的元件(類)
@Service 主要用於標識加入容器的物件是一個業務邏輯層的元件
@Controller 主要用於標識加入容器的物件是一個控制層的元件
@Resource 注入屬性(DI), 會從容器中找物件注入到@Resource修飾的物件上
@Autowired 注入屬性(DI), 會從容器中找物件注入到@Autowired修飾的物件上
複製程式碼
⑷ 註解可以簡化配置,提升開發效率,但是也不利於後期維護。