目录
说明
本例子不是web项目,主要内容是依赖注入的注解实现。
配置applicationContext.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启自动扫描text2_IoC包下的所以类的注释 注释方式IoC -->
<context:component-scan base-package="text2_IoC"></context:component-scan>
</beans>
说明:
开启注解
IoC注解的分类
1. 注册bean的注解(类级别)
1) @Component:通用注册bean的注解
2) @Service:注册service层的bean
3) @Repository:注册DAO层的bean
4) @Controller:注册控制层的bean
注意:上述四个注解可以给bean其名字,如果没有命名,则名字默认是类的名字的第一个字母小写
2. 注入bean的注解
1) @Autowired:自动注入bean,可以用在属性字段上,set方式上,构造器上
2) @Qualifier("bean名称"):和@Autowired配合使用,帮助@Autowired注入确定范围,可以用在方法的参数前
3) @Resource:这能用在set方法上,可以指定具体注册的bean名称 @Resource("bean名称")
3. 设置bean参数的注解
1) @Order(2):给相同类型的bean编序(类级别)
2) @Scope:设置bean的作用域,五个(类级别)
3) @PostConstruct:定义bean的初始化方法(方法级别)
4) @PreDestroy:定义bean的销毁方法(方法级别)
4. @bean注解
注册bean的注解(方法级别),和@Configuration配合使用(类级别)
//定义一个bean,名字自定义为stringStore,类型StringStore实现了Store 接口,初始化方法是init,结束方法是destroy
@Bean(name = "stringStore", initMethod="init", destroyMethod="destroy")
public Store stringStore() {
return new StringStore();
}
5. 获取外部文件数据的注解
1) @Configuration:配合下面一个注解使用(类级别)
2) @ImportResource("classpath:config.xml"):引入外部文件 config.xml(类级别)
3) @Value("${jdbc.username}"):将文件中的键值为jdbc.username的值注入成员变量中(字段级别)
6. 新注解
1) @Named:等价@Component+@Qualifier("bean名称"),可以在类上定义bean,还可以在字段和方法、参数上配合@Inject使用
2) @Inject:等价@Autowired
注意:收到spring的版本限制,需要引入javax.inject.jar包
说明:
用@Bean注册bean是在一个单独的类中注册其他已经实现的类
bean的作用域:
1.singleton单例模式(默认),
2.prototype原型模式,每次获取Bean时会创建一个新的实例
3.request
4.session
5.global session
注解使用的样例
注解使用的样例,代码片
.
package text2_IoC;
1) @Configuration:配合下面一个注解使用(类级别)
2) @ImportResource("classpath:config.xml"):引入外部文件 config.xml(类级别)
1) @Component:通用注册bean的注解
2) @Service:注册service层的bean
3) @Repository:注册DAO层的bean
4) @Controller:注册控制层的bean
1) @Named:等价@Component+@Qualifier("bean名称"),可以在类上定义bean,还可以在字段和方法、参数上配合@Inject使用
1) @Order(2):给相同类型的bean编序(类级别)
2) @Scope:设置bean的作用域,五个(类级别)
public class 这是一个需要注解的类 {
1) @Autowired:自动注入bean,可以用在属性字段上,set方式上,构造器上
2) @Qualifier("bean名称"):和@Autowired配合使用,帮助@Autowired注入确定范围,可以用在
private Object 字段;
3) @Value("${jdbc.driver}"):将文件中的键值为jdbc.driver的值注入成员变量中(字段级别)
private String driver;
3) @Value("${jdbc.url}"):将文件中的键值为jdbc.url的值注入成员变量中(字段级别)
private String url;
3) @Value("${jdbc.username}"):将文件中的键值为jdbc.username的值注入成员变量中(字段级别)
private String username;
3) @Value("${jdbc.password}"):将文件中的键值为jdbc.password的值注入成员变量中(字段级别)
private String password;
1) @Autowired:自动注入bean,可以用在属性字段上,set方式上,构造器上
2) @Qualifier("bean名称"):和@Autowired配合使用,帮助@Autowired注入确定范围,可以用在
public 这是一个需要注解的类(Object 字段){//构造方法
this.字段=字段;
}
1) @Autowired:自动注入bean,可以用在属性字段上,set方式上,构造器上
2) @Qualifier("bean名称"):和@Autowired配合使用,帮助@Autowired注入确定范围,可以用在
3) @Resource:这能用在set方法上,可以指定具体注册的bean名称 @Resource("bean名称")
2) @Inject:等价@Autowired
public void set字段(@Named("bean名称") Object 字段) {//set方法
this.字段 = 字段;
}
//定义bean的初始化方法
3) @PostConstruct:定义bean的初始化方法(方法级别)
public void init() {
System.out.println("初始化方法");
}
//定义bean的销毁方法
4) @PreDestroy:定义bean的销毁方法(方法级别)
public void destroy() {
System.out.println("销毁方法");
}
//定义一个bean,名字自定义为stringStore,类型StringStore实现了Store 接口,初始化方法是init,结束方法是destroy
@Bean(name = "stringStore", initMethod="init", destroyMethod="destroy")
public Store stringStore() {
return new StringStore();
}
//定义一个bean,名字是myDriverManager,实现接口是MyDriverManager,类是MyDriverManager(url, username, password)
@Bean
public MyDriverManager myDriverManager() {
return new MyDriverManager(driver,url, username, password);
}
}
说明:
上面代码只是样例不能运行,用@Bean注册bean是在一个单独的类中注册其他已经实现的类。
样例的实例
代码片
.
package text2_IoC;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.Scope;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
@Configuration //配合下面一个注解使用(类级别)
@ImportResource("classpath:config.xml") //引入外部文件 config.xml(类级别)
@Component //通用注册bean的注解
@Service //注册service层的bean
@Repository //注册DAO层的bean
@Controller //注册控制层的bean
@Named //等价@Component+@Qualifier("bean名称"),可以在类上定义bean,还可以在字段和方法、参数上配合@Inject使用
@Order(2) //给相同类型的bean编序(类级别)
@Scope //设置bean的作用域,五个(类级别)
public class 这是一个需要注解的类{
@Autowired//自动注入bean,可以用在属性字段上,set方式上,构造器上
@Qualifier("bean名称") //和@Autowired配合使用,帮助@Autowired注入确定范围,可以用在
private Object 字段;
@Value("${jdbc.driver}") //将文件中的键值为jdbc.driver的值注入成员变量中(字段级别)
private String driver;
@Value("${jdbc.url}") //将文件中的键值为jdbc.url的值注入成员变量中(字段级别)
private String url;
@Value("${jdbc.username}") //将文件中的键值为jdbc.username的值注入成员变量中(字段级别)
private String username;
@Value("${jdbc.password}") //将文件中的键值为jdbc.password的值注入成员变量中(字段级别)
private String password;
@Autowired //自动注入bean,可以用在属性字段上,set方式上,构造器上
public 这是一个需要注解的类(@Qualifier("bean名称") Object 字段){//构造方法
this.字段=字段;
}
@Autowired //自动注入bean,可以用在属性字段上,set方式上,构造器上
@Qualifier("bean名称") //和@Autowired配合使用,帮助@Autowired注入确定范围,可以用在
@Resource//这能用在set方法上,可以指定具体注册的bean名称 @Resource("bean名称")
@Inject //等价@Autowired
public void set字段(@Named("bean名称") Object 字段) {//set方法
this.字段 = 字段;
}
//定义bean的初始化方法
@PostConstruct //定义bean的初始化方法(方法级别)
public void init() {
System.out.println("初始化方法");
}
//定义bean的销毁方法
@PreDestroy //定义bean的销毁方法(方法级别)
public void destroy() {
System.out.println("销毁方法");
}
//定义一个bean,名字自定义为stringStore,类型StringStore实现了Store 接口,初始化方法是init,结束方法是destroy
@Bean(name = "stringStore", initMethod="init", destroyMethod="destroy")
public Store stringStore() {
return new StringStore();
}
//定义一个bean,名字是myDriverManager,实现接口是MyDriverManager,类是MyDriverManager(url, username, password)
@Bean
public MyDriverManager myDriverManager() {
return new MyDriverManager(driver, url, username, password);
}
}
说明
需要引入javax.inject.jar
总结
1. 使用注解的方式来实现IoC相对于配置方式更加方便,可以大大的简化开发过程。
2. 注解的内容只是简单的梳理了一下。
**引用包是最大的困难(一步一步来)**