昨天,在一次采访中,我被问到春天的DI和IoC是什么。我的答覆是:
当class(A)扩展抽象class(B)或实现interface(B)或创建其中任何类的class(B)对象时,则称A依赖于B。注入此依赖项,即在costructor或setter方法中注入对象称为DI,在此过程中,对创建对象的控制会像XML配置一样进入“外部世界”,这种控制反转就是IoC。国际奥委会没有必要设立国际奥委会。当没有国际奥委会的时候,我们仍然可以拥有DI。
面试官不同意我的观点--我哪里错了?
还有一件事-
当我们在构造函数或setter方法中使用Super class reference varia
在以下示例中是否使用依赖项注入:
@Scope("prototype")
@Component
public class Order{
@Autowired
public Order(User user,List<OrderItem> items,.......){
现在在其他地方:
@Component
public class PersistOrder{
@Autowired
Provider<Order> orderProvider;
public void prepareOrder() {
我正在尝试为我的问题找出最佳实践。我在一个类中有多个创建新对象的方法:
public void ToBeTested()
{
ClassForExmaple classForExample = new ClassForExample();
//Other logic.....
}
public void ToBeTested2()
{
ClassForExmaple2 classForExample2 = new ClassForExample2();
//Other lo
在测试调用构造函数的代码时,有没有办法构造一个模拟实例而不是一个真实的实例?
例如:
public class ClassToTest
{
public void MethodToTest()
{
MyObject foo = new MyObject();
Console.WriteLine(foo.ToString());
}
}
在本例中,我需要创建一个单元测试,以确认在ClassToTest实例上调用MethodToTest确实会输出新创建的MyObject实例的ToString()方法的结果。
我看不到单独测试'ClassToTest‘类的实际方法
我知道,我们通常通过在我们要注入的类的构造函数中实例化依赖项来注入依赖关系。然而,在我自己的经验中,我只是将依赖项的类作为参数传递,而不像下面的代码那样在构造函数中实例化(我目前正在使用Ruby):
class A
def initialize(dependency: AnotherClass)
@dependency = dependency
end
def main_operation
# do something here
@params = # do some stuff to get some params here
result =
我想在我的应用程序中使用多个类(对象)中的PDO连接,但是我过去尝试的方式是不正确的,因为每次我调用一个对象时,我也创建了一个新的PDO对象( connection )。
我现在正在使用spl_autoload_register进行自动显示。
下面是我的DataBase类(我从本例中删除了连接功能(名称、主机等)):
DataBase.php
namespace MyApp;
use PDO;
class DataBase {
public function DB_CONN() {
try {
$pdo = new \PDO(
我有一个与松散耦合的OOP设计有关的问题。假设我们有一个简单的值对象,比如电子邮件。
final class Email
{
private $_email;
public function __construct($email)
{
self::isValid($email);
$this->_email = $email;
}
public function getEmail()
{
return $this->_email;
}
public static
我编程已经有一段时间了,但从理论上讲,我从未对每个概念的含义感兴趣,我可能正在使用各种各样的编程概念,但却不知道。
服务定位器:对我来说,是指通过减少代码量来加速开发的快捷方式的记录。一个问题是: Locator是否只引用名称空间/类,或者我可以拥有一个变量注册中心?
以下是我对此的理解:
$locator = new ServiceLocator()
$locator->set('app', new System\Application());
$locator->set('db', new System\Pdo());
// Get the o
我有一个想法,需要在另一个类中加载。假设我有index.php,其中包括一次(database.php)。在类中,创建一个未由类扩展的新对象是否是可以接受的?换句话说,在全球范围内引入内容?我的意思是..。
index.php:
----------------------
include_once ('./core/dataAccess.php');
....
class home {
private function getUsers() {
$dataAccess = new DataAccess();
}
}
我想知道setter注入何时真正发生在Spring中,并为此调试了我的代码。当第一行执行时,构造函数和setter注入似乎都会发生。我想知道,如果要注入依赖关系的服务会注意到不同之处吗?据我理解它不会吗?如果没有,那么区别在哪里呢?
ApplicationContext context = new ClassPathXmlApplicationContext("spring-module.xml");
//Both setting and constructor dependencies are initialized at this point.
我有一些关于依赖注入容器(特别是Unity)的问题,以及它们实际上是如何在依赖注入中提供帮助的。
我相信我理解IoC/DI,并且已经使用基于构造函数的DI有几年了。通常在我使用DI时,只需要在我的类上有一个构造函数,比如MyClassX,它接受一个接口作为参数,比如IDataService,然后使用new操作符创建IDataService实现类的实例,并将其传递到MyClassX的构造函数中。通过这种方式,MyClassX不需要知道它正在使用的IDataService的确切类型,而是将它与特定类型解耦。如果我错了,现在纠正我,但这就是我对DI to be...though的理解,它不一定是基于
我使用依赖项注入来模拟类,以便对依赖它们的其他类进行单元测试:
class Foo : IFoo
{
// production code
}
class MockFoo : IFoo
{
// mock so other classes that depend on Foo can be unit tested
}
class Bar
{
public DoSomething()
{
var barValue = 20;
// use dependency injection to get Foo instance.
许多人声称OOP中使用的全局函数是个坏主意,因为您不能测试(模拟)它们。我应该用什么代替?总是依赖注入?
我有一些工具箱,它有许多小的函数,可以做特殊和有用的事情。例如转换字符串,做一些计算,清理混乱的HTML等等。在代码中使用它们非常方便。例如:
public function copyUploadedFile($filename, $dst_dir)
{
$filename = convertToSimpleString($filename);
if (!$filename) $error = displayError('Filename is empty!'
我正在考虑在我的项目中使用DI和Unity。我有一个问题:它将如何减少耦合?在我看来,耦合越来越多,因为:
我需要创建UnityContainer并注册那里的所有类型。这意味着我需要对创建此容器的程序集中的所有程序集进行引用。
IUnityContainer UnityContainer;//.CustomerService>();I需要使用IUnityContainer创建服务实例,但这意味着我需要使用容器来引用程序集。
var service = SomeClassWithContainer.UnityContainer.Resolve();
我是否误解了某些东西,或者在现实中,它正