SpringDI--依赖注入(配置文件方式)

方式一:Set注入

UserDao:

package com.spring.demo02;

public class UserDao {
    public void save() {
        System.out.println("持久层。。。");
    }
}

UserService:

package com.spring.demo02;

public class UserService {
    //配置文件注入:提供成员属性,设置set方法
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
        System.out.println("业务层。。。");
        //调用
        userDao.save();
    }
}

配置文件设置依赖注入:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

       <!-- 演示的依赖注入 -->
       <bean id="userDao" class="com.spring.demo02.UserDao"/>

       <bean id="userService" class="com.spring.demo02.UserService">
           <property name="userDao" ref="userDao"/>
       </bean>

</beans>

测试依赖注入:

package com.spring.demo02;

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

public class TestDI {
    @Test
    public void run() {
        //创建容器对象,加载配置文件,创建userDao对象,userService也被创建
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userService对象
        UserService userService = (UserService) context.getBean("userService");
        //调用save方法
        userService.save();
    }
}

运行结果:

方式二:构造函数注入

User:

package com.spring.demo03;

public class User {
    private String name;
    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

配置文件设置依赖注入:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

       <!-- 方式一:Set注入 -->
       <bean id="userDao" class="com.spring.demo02.UserDao"/>

       <bean id="userService" class="com.spring.demo02.UserService">
           <property name="userDao" ref="userDao"/>
       </bean>

       <!-- 方式二:构造方法的注入方式:name是属性名称,value是注入的值,如果要出入引用使用raf标签 -->
       <bean id="user" class="com.spring.demo03.User">
           <constructor-arg name="name" value="Tom"/>
           <constructor-arg name="age" value="18"/>

           <!-- 第二种方式  index写序号就行 -->
           <!-- <constructor-arg index="0" value="Tom"/>
           <constructor-arg name="1" value="18"/> -->

       </bean>

测试:

package com.spring.demo03;

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

public class TestDI {
    @Test
    public void run() {
        //创建容器对象,加载配置文件,创建User类的对象,并构造函数初始化
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取user对象
        User user = (User) context.getBean("user");
        System.out.println(user);
    }
}

运行结果:

方式三:p命名空间注入方式

User:

package com.spring.demo03;

public class User {
    private String name;
    private Integer age;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

配置文件设置依赖注入:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 方式三:p命名空间注入方式 -->
    <bean id="user" class="com.spring.demo03.User" p:name="Tom" p:age="18" />        

</beans>

配置文件中需要设置命名空间p

测试:

package com.spring.demo03;

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

public class TestDI {
    @Test
    public void run() {
        //创建容器对象,加载配置文件,创建User类的对象,并构造函数初始化
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取user对象
        User user = (User) context.getBean("user");
        System.out.println(user);
    }
}

运行结果;

方式四:集合方式

原文地址:https://www.cnblogs.com/jumpkin1122/p/11623374.html

时间: 2024-10-10 10:07:44

SpringDI--依赖注入(配置文件方式)的相关文章

spring 配置bean的方法及依赖注入发方式

Bean 的配置方式:通过全类名(反射).通过工厂方法(静态工厂方法 & 实例工厂方法).FactoryBean 这里依据全类名配置bean <bean id="helloWord" class="com.spring.HelloWord"> <property name="userName" value="springsss"></property> </bean> 依

Spring 依赖注入的方式

Spring 支持3中依赖注入的方式 1.属性注入  通过setter 方法注入Bean的属性或依赖的对象. <bean id = " " class = " "> <property name = " " value = " "> </property>     <property name = " " value = " "> <

依赖注入及AOP简述(五)——依赖注入的方式 .

二.依赖注入的应用模式 前面我们了解了依赖注入的基本概念,也对一些依赖注入框架进行了简单的介绍,这一章我们主要来讨论作为开发者如何利用依赖注入框架来实现依赖注入的设计思想. 1.     依赖注入的方式 前面我们提到,所谓“依赖”,最简单地去解释就是一个Java类里的成员变量.我们都知道,给一个类中的私有成员变量赋值的方法通常有:通过Constructor构造方法.通过Setter方法.通过反射机制将私有变量的可见性设为true这三种方法.同样道理,依赖注入框架也是利用这三种方式来完成依赖对象的

MVVM模式用依赖注入的方式配置ViewModel并注册消息

最初的想法 这次主要讨论下给View指定ViewModel的事情.一般来说给View指定ViewModel常用的方式有两种,一种是在View的后台代码中写DataContext = new ViewModel(),还有一种是在XAML中指定View的DataContext.这两种方式都使得View对ViewModel产生了依赖,这种情况下可以考虑用依赖注入的方式使取消View对ViewModel的直接依赖.依赖注入一般来说可以通过构造函数注入.通过设置属性注入,这两种方法对于View来说都不合适

自定义Spring--DI依赖注入

1.框架思想 IoC(Inversion of Control,控制反转,反向控制),或者成为DI(Dependency Injection,依赖注入). 在传统程序中,相互的依赖性是固定在程序中的.程序的运行也是一步一步的,完全按照程序代码执行,根据代码就能知道程序怎样运行. 在Spring中程序间的依赖关系并不是直接写在程序中,而是配置在Spring文件中,有Spring在运行时配置的.在编译阶段,既没有实例化对象,也没有设置依赖关系,而是把依赖关系交给Spring,有Spring在运行阶段

spring依赖注入的方式(一)

为了方便类的管理,spring提供了依赖注入的思想:类的实例化不由程序员控制,而是交给sprig容器进行管理. spring提供了多种类型的注入方式---注解.xml注入: 1  注解注入 有两种:@Autowired @Resource.两种都可以实现注入,但是二者的差别也很明显. @Resource 默认按照名称注入,在找不到名称的时候,会继续通过类型匹配: @Autowired 默认按照类型注入: @Resource 注解是由J2EE提供,而@Autowired是由spring提供,故为了

ASP.NET5最佳实践:技术选择+依赖注入+配置文件读写

1.技术选择 页面: html静态页面很好,但模板(代码块)重用怎么办? 再有与后台交互,比如绑定数据又如何办? 模板不能重用,无解.后台交互,无怪乎可以使用js代码.特别现在流行SPA应用,html+angularjs类的框架…… cshtml可以使用Layout页(类似webfroms master模板页),也可以使用ViewsComponets(类似于webfroms web控件) 它使用Razor视图引擎解析,页面甚至可以使用c#语言.和后台交互式很Easy的. 如果说cshtml结构代

EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下?

前言 这个问题从未遇见过,是一位前辈问我EF Core内存泄漏问题时我才去深入探讨这个问题,刚开始我比较惊讶,居然还有这种问题,然后就有了本文,直接拿前辈的示例代码并稍加修改成就了此文,希望对在自学EF Core过程中的童鞋能有些许帮助. EntityFramework Core内存泄漏回顾 接下来我将用简单示例代码来还原整个造成EntityFramework Core内存泄漏的过程,同时在这个过程中您也可思考一下其中的原因和最终的结果是否一致. public class TestA { pub

spring学习 五 依赖注入的方式

依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<bean>标签下使用<property>标签,就是setter注入 2.1: 如果属性是基本数据类型或 String 等简单类型 <bean id="peo" class="com.bjsxt.pojo.People"> <proper

依赖注入的方式(DI)

方式: 接口注入: setter方法注入: 构造方法注入: 接口注入: public class ClassA { private InterfaceB clzB; public void doSomething() { Ojbect obj = Class.forName(Config.BImplementation).newInstance(); clzB = (InterfaceB)obj; clzB.doIt(); } -- } 解释一下上述的代码部分,ClassA依赖于Interfac