javascript
【Spring学习】IoC、DI、AOP入门学习
新建一個普通的java項目,添加spring功能(3.x),不要使用MyEclipse提供的jar包,自己手動添加需要的jar包(commons-logging.jar、spring.jar);
IoC控制反轉:
Hello.java
package domain;public class Hello {private String msg;public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String toString(){return "hello " + msg;} }applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><bean id="hello" class="domain.Hello"><property name="msg" value="lmb"></property><!-- 通過Hello實體類中的setMsg()方法并msg成員變量的值注入 --></bean> </beans>TestHello.java:
package web;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import domain.Hello;public class TestHello {/*** 注意體會控制反轉IoC的思想*/public static void main(String[] args) {//*****通過new來創建對象**************************Hello hello1=new Hello();System.out.println(hello1); //hello null//****通過spring框架來創建對象****************************ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");//加載配置文件Hello hello2=(Hello)applicationContext.getBean("hello");//利用applicationContext得到bean,注意這里的"hello"與applicationContext.xml中<bean>配置中的id對應System.out.println(hello2);//hello lmb//我們在applicationContext.xml配置文件中的<bean>在的<property>中為Hello實體類中的msg屬性配置了一個"lmb"的值}}總結:
普通創建對象時,我們通過new來控制對象的生命周期,使用IoC之后,控制反轉IoC的思想就是:把管理對象的生命周期的控制權交給spring框架,使用spring框架來構建對象,由spring框架來管理對象生命周期的開始和結束。
DI依賴注入:
TestUser.java:
package web;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import Manager.UserManager; import domain.User;public class TestUser {/*** 注意體會依賴注入DI的思想*/public static void main(String[] args) {User user=new User();//該User對象是從前臺頁面獲取的ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");UserManager userManager=(UserManager)applicationContext.getBean("userManager");//通過applicationContext.xml配置文件獲取UserManager對象和它的實現,同時也就能獲取到UserDao對象和它的實現//控制層調用業務邏輯層處理業務邏輯userManager.addUser(user); //JDBC insert User.......} }UserManagerImpl.java
package Manager;import dao.UserDao; import domain.User;public class UserManagerImpl implements UserManager {private UserDao userDao;public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void addUser(User user) {// 業務邏輯層調用持久層進行數據持久化處理//使用普通的方法是用new的方法構建一個UserDao對象//UserDao userDao=new UserDaoImpl();//注意這里沒有給出UserDao的實現,UserDao的實現是通過配置文件注入的userDao.insertUser(user);}}UserDaoImpl.java
package dao;import domain.User;public class UserDaoImpl implements UserDao {public void insertUser(User user) {//持久層使用JDBC的方式將數據持久化到數據庫中,這里用一個打印語句代替System.out.println("JDBC insert User.......");}}applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!-- UserDaoImpl中沒有需要注入的屬性 --><bean id="userDao" class="dao.UserDaoImpl"></bean><!-- UserManagerImpl中需要將userDao的實現注入 --><bean id="userManager" class="Manager.UserManagerImpl"><property name="userDao" ref="userDao"></property></bean></beans>總結:
在UserManagerImpl.java中我們只聲明了UserDao對象,并沒有給出它的實現,它的實現是通過applicationContext.xml配置文件中UserManager的配置依賴注入的。
AOP面向切面編程
在上面項目的基礎上再添加一個UserDaoHibernateImpl.java
UserDaoHibernateImpl.java:
package dao; import domain.User;public class UserDaoHibernateImpl implements UserDao{public void insertUser(User user) {//持久層使用Hibernate的方式將數據持久化到數據庫中,這里用一個打印語句代替System.out.println("Hibernate insert User.....");} }修改applicationContext.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!-- UserDaoImpl中沒有需要注入的屬性 --><bean id="userDao" class="dao.UserDaoImpl"></bean><bean id="userDaoHibernate" class="dao.UserDaoHibernateImpl"></bean><!-- UserManagerImpl中需要將userDao的實現注入 --><bean id="userManager" class="Manager.UserManagerImpl"><!-- <property name="userDao" ref="userDao"></property> --><property name="userDao" ref="userDaoHibernate"></property></bean></beans>TestUser.java會輸出Hibernate insert User…..
總結:
開閉原則:對代碼的修改關閉,對代碼的添加打開;
spring有解耦的作用,需要面向接口編程,在本例中UserDaoImpl和UserDaoHibernateImpl都實現了UserDao這個接口。
總結
以上是生活随笔為你收集整理的【Spring学习】IoC、DI、AOP入门学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSH整合实例详解
- 下一篇: 【JFreeChart】JFreeCha