相关疑难解决方法(0)

自动装配如何在Spring工作?

关于控制(IoC)的反转是如何工作的,我有点困惑Spring.

假设我有一个名为的UserServiceImpl实现UserService接口的服务类.

怎么会这样@Autowired

而在我Controllers,我怎么会instantiateinstance这个服务的?

我会做以下吗?

UserService userService = new UserServiceImpl();
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc ioc-container autowired

481
推荐指数
5
解决办法
33万
查看次数

@Resource vs @Autowired

我应该在DI中使用哪个注释@Resource(jsr250)或@Autowired(特定于Spring)?

我已经成功地在过去使用两种,@Resource(name="blah")@Autowired @Qualifier("blah")

我的直觉是坚持使用@Resource标签,因为它已被jsr人批准.
有人对此有强烈的想法吗?

java spring annotations dependency-injection autowired

359
推荐指数
9
解决办法
22万
查看次数

了解Spring @Autowired用法

我正在阅读spring 3.0.x参考文档以了解Spring Autowired注释:

3.9.2 @Autowired和@Inject

我无法理解下面的例子.我们是否需要在XML中执行某些操作才能使用它?

例1

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Autowired
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

例2

public class MovieRecommender {

    private MovieCatalog movieCatalog;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public void prepare(MovieCatalog movieCatalog,
                    CustomerPreferenceDao customerPreferenceDao) {
        this.movieCatalog = movieCatalog;
        this.customerPreferenceDao = customerPreferenceDao;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如何通过自动装配两个类来实现相同的接口并使用相同的类?

例:

class Red implements Color
class Blue implements Color

class myMainClass{
    @Autowired 
    private Color color;

    draw(){
        color.design(); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

将调用哪种设计方法?如何确保调用Red类的设计方法而不是Blue?

java spring autowired spring-3

295
推荐指数
3
解决办法
40万
查看次数

Spring依赖注入@Autowired没有setter

我现在使用Spring几个月了,我认为使用@Autowired注释的依赖注入也需要为该字段注入一个setter.

所以,我这样使用它:

@Controller
public class MyController {

    @Autowired
    MyService injectedService;

    public void setMyService(MyService injectedService) {
        this.injectedService = injectedService;
    }

    ...
Run Code Online (Sandbox Code Playgroud)

}

但我今天试过这个:

@Controller
public class MyController {

    @Autowired
    MyService injectedService;

    ...
Run Code Online (Sandbox Code Playgroud)

}

哦惊喜,没有编译错误,启动时没有错误,应用程序运行完美...

所以我的问题是,使用@Autowired注释进行依赖注入所需的setter是什么?

我正在使用Spring 3.1.1.

java spring dependency-injection autowired

26
推荐指数
1
解决办法
3万
查看次数

为什么Spring不支持直接字段依赖注入(自动装配除外)?

我对直接场依赖注入感兴趣.传统上,Spring支持构造函数注入(为构造函数提供参数)和基于setter的注入(在调用时调用setter).

但是,Spring也能够直接注入场景(在没有setter方法的情况下设置对象的成员字段),通过使用注释字段来证明@Autowired.自动装配仅限于"bean",因此无法注入原始值(虽然这可以通过创建类"java.lang.String"的bean来规避 - 这可行,但具有正常的自动装配警告.)除了这个,Spring支持@Value直接从属性等设置成员字段的值.

但是,Spring不允许将属性直接设置为成员字段(不使用自动装配).

我的问题是:为什么?

它显然有能力这样做,为什么不呢?是否有任何大的负面副作用阻止这种情况?或者这种能力是否有限,只有自动装配才有意义?它是否需要比调用setter更大的黑客攻击?

请注意,我不想讨论一般的setter和getter的相对优点,只是Spring做出这个选择的原因.

java spring dependency-injection

19
推荐指数
2
解决办法
1万
查看次数

@autowired注释如何用于私有字段?

如果@Autowired没有getter setter ,注释如何用于私有字段?春天如何进入私人领域?

java spring

11
推荐指数
1
解决办法
2万
查看次数