2020-08-08

Dependency pull Via JNDI Lookup

package com.apress.prospring5.ch3;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DependencyPull {
    public static void main(String... args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/app-context.xml");
        MessageRenderer mr = ctx.getBean("renderer", MessageRenderer.class);
        mr.render();
    }
}

Spring 。ApplicationContext注入bean和获取Bean。


package com.apress.prospring5.ch3;
public interface ManagedComponent {
    void performLookup(Container container);
}

public interface Container {
    Object getDependency(String key);
}

public class ContextualizedDependencyLookup
        implements ManagedComponent {
    private Dependency dependency;
    @Override
    public void performLookup(Container container) {
        this.dependency = (Dependency) container.getDependency("myDependency");
    }
    @Override
    public String toString() {
        return dependency.toString();
    }
}

容器获取Bean(Contextualized Dependency Lookup)


package com.apress.prospring5.ch3;
public class ConstructorInjection {
        private Dependency dependency;
        public ConstructorInjection(Dependency dependency) {
            this.dependency = dependency;
        }
        @Override
        public String toString() {
            return dependency.toString();
        }
}

通过构造器注入


package com.apress.prospring5.ch3;
public class SetterInjection {
        private Dependency dependency;
        public void setDependency(Dependency dependency) {
            this.dependency = dependency;
        }
        @Override
        public String toString() {
            return dependency.toString();
        }
}

通过setter注入

Injection 和 Lookup

Spring使用的注入,而EJB使用的是Lookup


public void performLookup(Container container) {
        this.dependency = (Dependency) container.getDependency("myDependency");
}

这种lookup的方式,container可能为null,key可能或改变,以及bean的类型可能不对。

Spring可以依赖注入EJB

Injection绝对比Lookup是更好的选择,更简洁。Injection不会和Bean的容器耦合

 

SETTER INJECTION AND CONSTRUCTOR INJECTION

Constructor Injection 优点:

1.不可变类

Setter Injection 优点:

1.可以把Setter放到接口里,让实现类知道需要依赖哪些组件(最好不这样做)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值