java - 通过CDI注入代理

时间:2017-06-07 15:11:28

标签: java cdi

在我的项目中我有一些外部Java接口(所以我无法改变它们)。 E.g。

public interface Abc
{
    void do123();
}

在bean中我喜欢通过注入使用这个接口。 E.g。

public class TestAbc
{
    @Inject
    private Abc abc;
}

但我没有实现此接口或生产者方法。相反,我正在寻找为此接口注入通用代理的方法。

我想,我需要像cdi扩展这样的东西。不幸的是,我无法找到任何好的方法。 在一个最佳的世界中,我希望实现这样的方法。

public Object produce( Class< ? > type )
{
    if(isMyType(type))
    {
        // I can produce this type
        return createProxy(type);
    }
    return null; // this method can't produce this type
}

有没有人知道如何做到这一点?

此致 约翰内斯

1 个答案:

答案 0 :(得分:1)

所以,最后我明白了。 对于我的用例,我需要一个CDI扩展,它可以监听ProcessInjectionPoint和AfterBeanDiscovery。 ProcessInjectionPoint收集所有相关的注入接口,AfterBeanDiscovery为这个接口创建bean。

检查注入是否相关是通过@RMI的注释完成的。 @RMI是一个自己的限定符注释。 RMILifecyle负责构建或销毁注入的对象。 这里有一些源代码。

import Foundation
import Alamofire
import UIKit

class webViewController: UIViewController {

    @IBOutlet var webBrowser: UIWebView! = nil

    var targetURL = "https://www.yahoo.co.jp"

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        //loadAddressURL()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func loadAddressURL() {
        let requestURL = NSURL(string: targetURL)
        let req = NSURLRequest(url: requestURL as! URL)
        webBrowser.loadRequest(req as URLRequest)
    }



}

这对我很有用。