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

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

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

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

 


【Java面试题与答案】整理推荐

  • 基础与语法
  • 集合
  • 网络编程
  • 并发编程
  • Web
  • 安全
  • 设计模式
  • 框架
  • 算法与数据结构
  • 异常
  • 文件解析与生成
  • Linux
  • MySQL
  • Oracle
  • Redis
  • Dubbo

 

你可能感兴趣的:(面试,自做,Java,面试题)