DI 依赖注入

  依赖:一个对象需要使用另一个对象

  注入:通过set方法进行另一个对象的设置

实例:

创建bookDao

package b.di;

public interface BookDao {
    public void addBook();
    

}

创建bookDaoImpl

复制代码
package b.di;

public class BookDaoImpl implements BookDao {

    @Override
    public void addBook() {
        System.out.println("di 添加 BOOK");

    }

}
复制代码

创建bookservice

复制代码
package b.di;

public interface BookService {

    void save();
    
    void AddBook();

}
复制代码

创建bookServiceImpl

复制代码
package b.di;

public class  BookServiceImpl implements BookService {

    //方式1:接口=实现类
    //    private BookDao bookdao=new BookDaoImpl();
    
    //方式2:接口+setter
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    /* (non-Javadoc)
     * @see b.di.BookService#addBook()
     */
    @Override
    public void save(){
        System.out.println("this is save ");
    }

    @Override
    public void AddBook() {
        bookDao.addBook();
    }

}
复制代码

创建测试类

复制代码
package b.di;


import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDi {
@Test    
 public  void demo1(){
    String xmlPath="b/di/beans.xml";
    ApplicationContext appContext=new ClassPathXmlApplicationContext(xmlPath);
    BookService bookService=(BookService) appContext.getBean("BookServiceId");
    bookService.save();
}
@Test    
public  void demo2(){
    String xmlPath="b/di/beans.xml";
    ApplicationContext appContext=new ClassPathXmlApplicationContext(xmlPath);
    BookService bookService=(BookService) appContext.getBean("BookServiceId");
    bookService.AddBook();
}
}
复制代码

创建xml配置文件

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                              http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 配置service 
        <bean> 配置需要创建的对象
            id :用于之后从spring容器获得实例时使用的
            class :需要创建实例的全限定类名
    
    <bean id="UserServiceId" class="a.ioc.UserserviceImpl"></bean>-->
    
    
    <!-- 创建service -->
    <bean id="BookServiceId" class="b.di.BookServiceImpl">
    <property name="BookDao" ref="BookDaoImplId"></property> 
    
            <!-- 
            property 用于进行属性注入的 
            name 是属性名
            ref:另一个beanid值得引用
            -->
    
    </bean>
    
    <!-- 创建Dao -->
        
    <bean id="BookDaoImplId" class="b.di.BookDaoImpl"></bean>
</beans>
复制代码

现在就可以跑测试用例了

demo1 的运行结果

demo2的运行结果

 

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示