目标:掌握IOC相关知识、掌握基于XML方式、注解方式、JAVA配置方式进行IOC的开发。
1 基于XML方式开发
- Bean标签的属性:默认情况下是调用类中的无参构造函数 属性:id、class、scope(singleton、prototype...)、init-method、destroy-method
- 依赖注入的方式:构造方法注入、set方式注入、P名称空间注入、SPEL表达式
2 基于注解方式开发
2.1 IOC常用注解
类上的注解
- @Component("xx") 相当于注册一个Bean对象,默认Bean的ID就是类名,但首字母小写。如果类名以连续几个大写字母开头,首字母不小写。(即QIKEGUService -> QIKEGUService)
- @Controller、@Service、@Repository 等同于@Component,是其衍生注解。
依赖注入
依赖注入的方式有:构造函数注入、属性注入【推荐】、setter方法注入
- 对象属性:@Autowired【按照类型注入、与@Qualifier(value="xx")配合使用】、@Resource【常用、按Bean的名称注入@Resource(name="xxx")】
- 普通属性:@Value("")
生命周期
- @PostConstruct 初始化:相当于xml中的init-method
- @PreDestroy 销毁:相当于xml中的destroy-method
作用范围
- @@Scope("") 双引号里面可以填singleton、prototype、request、session、globalsession
2.2 IOC基于注解开发Demo
配置Spring.xml<?xml version="1.0" encoding="UTF-8"?>
<!-- =======================引入spring的约束 ========================= -->
<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">
<!--打开组件扫描,启用注解配置-->
<context:component-scan base-package="com.zcc"/>
</beans>
编写实体类
package com.zcc.Domain;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class User {
@Value("张三")
private String username;
@Value("12")
private int age;
@Resource(name="account")
private Account account;
//getter/setter/toString
}
package com.zcc.Domain;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Account {
@Value("111222")
private int id;
private double money;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getMoney() {
return money;
}
@Value("123.2")
public void setMoney(double money) {
this.money = money;
}
}
编写测试类
@org.junit.Test
public void demo2() {
//使用工厂类去读取配置文件去创建并存储对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Spring.xml");
//获取Bean实例
User user = applicationContext.getBean("user", User.class);
System.out.println(user.toString());
System.out.println(user.getAccount().getId()+":"+user.getAccount().getMoney());
}
输出结果

3 基于JAVA配置开发
从Spring3.0后,可以使用java代码配置Bean,替代XML配置。主要使用以下注解:- @Configuration:标注的类是配置类,用于配置Bean之间依赖关系,相当于一个xml配置文件
- @Bean :作用于方法上,相当于xml配置中的,方法返回Bean实例,Spring容器会注册这个Bean,并将方法名作为Bean ID。
- @Import注解允许从另一个配置Java/XML文件加载bean定义。
使用例子
package com.zcc.Domain;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration // 表明这是个Bean的Java配置类
public class SpringConfig {
@Bean
public Account account() {
return new Account();
}
@Bean
public User user(){
return new User(account());
}
}
在User类中加入无参及有参构造
public User(){
}
public User(Account account) {
this.account = account;
}
测试类
@org.junit.Test
public void demo3() {
//使用工厂类去读取配置文件去创建并存储对象
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
//获取Bean实例
User user = applicationContext.getBean("user", User.class);
System.out.println(user.toString());
System.out.println(user.getAccount().getId()+":"+user.getAccount().getMoney());
}