spring常用的注入方式有哪些? 您所在的位置:网站首页 spring常见的注入方式有哪些 spring常用的注入方式有哪些?

spring常用的注入方式有哪些?

2024-06-27 03:13| 来源: 网络整理| 查看: 265

1、xml中配置

bean 的申明、注册

节点注册 bean 节点的 factory-bean 参数指工厂 bean,factory-method 参数指定工厂方法

 

bean 的注入

节点使用 set 方式注入 节点使用 构造方法注入

 

实测代码

maven pom 文件 

org.springframework spring-beans 4.2.4.RELEASE org.springframework spring-context 4.2.4.RELEASE

 

a) + ,set方法注入

class Bowl

package constxiong.interview.inject; public class Bowl { public void putRice() { System.out.println("盛饭..."); } }

class Person

package constxiong.interview.inject; public class Person { private Bowl bowl; public void eat() { bowl.putRice(); System.out.println("开始吃饭..."); } public void setBowl(Bowl bowl) { this.bowl = bowl; } }

spring 配置文件

测试类

package constxiong.interview.inject; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class InjectTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring_inject.xml"); Person person = (Person)context.getBean("person"); person.eat(); } }

 

 b) 修改为 配置文件和class Person, + 节点使用 构造方法注入

class Person

package constxiong.interview.inject; public class Person { private Bowl bowl; public Person(Bowl bowl) { this.bowl = bowl; } public void eat() { bowl.putRice(); System.out.println("开始吃饭..."); } }

spring 配置文件

 

c) 节点 factory-method 参数指定静态工厂方法

工厂类,静态工厂方法

package constxiong.interview.inject; public class BowlFactory { public static final Bowl getBowl() { return new Bowl(); } }

spring 配置文件

 

d) 非静态工厂方法,需要指定工厂 bean 和工厂方法

工厂类,非静态工厂方法

package constxiong.interview.inject; public class BowlFactory { public Bowl getBowl() { return new Bowl(); } }

配置文件

 

2、注解

bean 的申明、注册

@Component //注册所有bean @Controller //注册控制层的bean @Service //注册服务层的bean @Repository //注册dao层的bean

 

bean 的注入

@Autowired 作用于 构造方法、字段、方法,常用于成员变量字段之上。 @Autowired + @Qualifier 注入,指定 bean 的名称 @Resource JDK 自带注解注入,可以指定 bean 的名称和类型等

 

测试代码

e) spring 配置文件,设置注解扫描目录

 

class Bowl

package constxiong.interview.inject; import org.springframework.stereotype.Component; //import org.springframework.stereotype.Controller; //import org.springframework.stereotype.Repository; //import org.springframework.stereotype.Service; @Component //注册所有bean //@Controller //注册控制层的bean //@Service //注册服务层的bean //@Repository //注册dao层的bean public class Bowl { public void putRice() { System.out.println("盛饭..."); } }

 

class Person

package constxiong.interview.inject; //import javax.annotation.Resource; // import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component //注册所有bean //@Controller //注册控制层的bean //@Service //注册服务层的bean //@Repository //注册dao层的bean public class Person { @Autowired // @Qualifier("bowl") // @Resource(name="bowl") private Bowl bowl; public void eat() { bowl.putRice(); System.out.println("开始吃饭..."); } }

 

测试类同上

 

a、b、c、d、e 测试结果都ok

盛饭... 开始吃饭...

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有