日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【Spring学习】IoC、DI、AOP入门学习

發布時間:2024/4/14 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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入门学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。