Spring--方法注入
1 Spring利用了CGLIB庫在執行時生成二進位制程式碼功能,通過動態建立Lookup方法bean的子類而達到複寫Lookup方法的目的。
例:
建立一個抽象類:
public abstract class CommandManager {
public void process() {
Command command = createCommand();
command.sayHello();
}
protected abstract Command createCommand();
}
注入的方法的類,實現BeanFactoryAware介面 :
public class Command {
public void sayHello() {
System.out.println("hello world");
}
}
配置檔案:
<bean id="command" class="com.test.service.Command"/>
<bean id="commandManager" class="com.test.service.CommandManager">
<lookup-method name="createCommand" bean="command"/>
</bean>
測試:
public class TextMain {
public static void main(String[] args){
ClassPathResource classPathResource = new ClassPathResource("beanFactoryText.xml");
BeanFactory beanFactory=new XmlBeanFactory(classPathResource);
CommandManager commandManager=(CommandManager)beanFactory.getBean("commandManager");
commandManager.process();
}
}
Spring通過動態建立一個CommandManager 的實現類,Commed物件動態注入抽象方法createCommand的放回值中。
2 替換方法
替換的方法:
public class TestMethodReplacer implements MethodReplacer {
public Object reimplement(Object obj, Method method, Object[] args) throws Throwable {
System.out.println("TestMethodReplacer-》reimplement");
return null;
}
}
被替換的方法:
public class UserService {
public void sayHello() {
System.out.println("UserService-》sayHello");
}
}
配置:
<bean id="userService" class="com.test.service.UserService">
<replaced-method name="sayHello" replacer="testMethodReplacer"/>
</bean>
<bean id="testMethodReplacer" class="com.test.service.TestMethodReplacer"/>
測試將會輸出 TestMethodReplacer-》reimplement而不是UserService-》sayHello
相關文章
- Laravel 使用依賴注入呼叫方法Laravel依賴注入
- 程式碼注入的三種方法
- Python 防止sql注入的方法PythonSQL
- 【SpringBoot】Spring-->SpringBoot 習慣優於配置Spring Boot
- .Net防sql注入的方法總結SQL
- 程式碼注入漏洞以及修復方法
- MySQL 及 SQL 注入與防範方法MySql
- 幾種通用防注入程式繞過方法
- React 原始碼中的依賴注入方法React原始碼依賴注入
- 網站被sql注入的修復方法網站SQL
- SQL指令碼注入的不常見方法概括SQL指令碼
- PHP網站中整體防注入方法PHP網站
- Spring注入:配置注入(set注入和構造器注入)與註解注入Spring
- Spring方法注入的使用與實現原理Spring
- 4、幾種通用防注入程式繞過方法
- .net core番外第2篇:Autofac的3種依賴注入方式(建構函式注入、屬性注入和方法注入),以及在過濾器裡面實現依賴注入依賴注入函式過濾器
- SQL 注入:聯合注入SQL
- sql注入之union注入SQL
- 程式注入之DLL注入
- mysql注入方法邏輯運算及常用函式MySql函式
- sql注入之堆疊注入及waf繞過注入SQL
- 封神臺MYSQL 注入 - Dns注入MySqlDNS
- win10最強注入工具,遠端執行緒注入、訊息鉤子注入、輸入法注入、EIP注入、登錄檔注入、APC注入(APC好像不能用)Win10執行緒
- C# 依賴注入IServiceCollection的AddSingleton方法使用C#依賴注入
- Mysql注入點在limit關鍵字後面的利用方法MySqlMIT
- 封神臺Oracle注入- 報錯注入Oracle
- 不用注入方式使用Spring管理的物件中的方法,神奇Spring物件
- 關於laravel 框架實現路由自動注入解決方法Laravel框架路由
- sql注入之型別及提交注入SQL型別
- C++ DLL注入和程式碼注入C++
- dns注入DNS
- sql注入SQL
- php注入PHP
- SQL 注入SQL
- quine注入UI
- IOC注入技術之編譯時注入編譯
- Spring中注入List,Set,Map,Properties的xml檔案配置方法SpringXML
- sql注入修改SQL