Spring框架IOC容器

##目錄java

  • 1. Spring開源框架的簡介程序員

  • 2. Spring下IOC容器和DI(依賴注入Dependency injection)web

###1、Spring開源框架的簡介spring

  Spring是一個開源框架,也是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著做《Expert One-On-One J2EE Development and Design》中闡述的部分理念和原型衍生而來。它是爲了解決企業應用開發的複雜性而建立的。編程

  Spring使用基本的JavaBean來完成之前只可能由EJB完成的事情。然而,Spring的用途不只限於服務器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用均可以從Spring中受益。 簡單來講,Spring是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架。性能優化

  spring的基本框架主要包含六大模塊:DAOORMAOPJEEWEBCORE服務器

  Spring基本框架

Spring DAO:Spring提供了對JDBC的操做支持:JdbcTemplate模板工具類 。架構

Spring ORM:Spring能夠與ORM框架整合。例如Spring整合Hibernate框架,其中Spring還提供HibernateDaoSupport工具類,簡化了Hibernate的操做 。mvc

Spring WEB:Spring提供了對Struts、Springmvc的支持,支持WEB開發。與此同時Spring自身也提供了基於MVC的解決方案 。框架

Spring AOP:Spring提供面向切面的編程,能夠給某一層提供事務管理,例如在Service層添加事物控制 。

Spring JEE:J2EE開發規範的支持,例如EJB 。

Spring Core:提供IOC容器對象的建立和處理依賴對象關係 。

###2、Spring下IOC容器和DI(依賴注入Dependency injection)

  IOC容器:就是具備依賴注入功能的容器,是能夠建立對象的容器,IOC容器負責實例化、定位、配置應用程序中的對象及創建這些對象間的依賴。一般new一個實例,控制權由程序員控制,而"控制反轉"是指new實例工做不禁程序員來作而是交給Spring容器來作。。在Spring中BeanFactory是IOC容器的實際表明者。

  DI(依賴注入Dependency injection) :在容器建立對象後,處理對象的依賴關係。

  依賴注入spring的注入方式:

  • set注入方式
  • 靜態工廠注入方式
  • 構造方法注入方式
  • 基於註解的方式

  一、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>

  二、構造器注入方式:

 控制層代碼:

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>

  三、基於註解的方式(推薦使用,比較便捷少配置

 控制層代碼:

@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修飾的對象上

  ⑷ 註解能夠簡化配置,提高開發效率,可是也不利於後期維護。

 注:@Autowired與@Resource的區別

相關文章
相關標籤/搜索