文章目录
- 1. spring DI依赖注入的概念
- 2. spring DI依赖的类型。
- 3. 如何实现注入的方式。
- 4. 自动注入的方式
- 5. 使用注解完成注入功能。
一、什么是DI?
IOC:控制反转 创建对象!
DI 依赖注入:目的就是给对象中的属性赋值。
二、依赖注入的类型有哪些?
基本数据类型, 字符串类型,引用类型,集合类型。
三、如何实现注入对象的属性值
1)引入相关的依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
</dependencies>
2)创建一个类:---提供set方法
package com.zsb.demo;
public class Student {
private Integer age;
private String name;
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
public Student() {
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3)配置文件:---在bean标签中<property name="属性名" >
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student01" class="com.zsb.demo.Student">
<property name="name" value="张三"/>
<property name="age" value="15"/>
</bean>
</beans>
4)测试
package com.zsb.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
Student student01 = (Student) app.getBean("student01");
System.out.println(student01);
}
}
四、 使用spring注入其他数据类型
package com.zsb.demo;
public class Student {
private Integer age;
private String name;
private Clazz clazz;
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
", clazz=" + clazz +
'}';
}
public Student() {
}
public Clazz getClazz() {
return clazz;
}
public void setClazz(Clazz clazz) {
this.clazz = clazz;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.zsb.demo;
public class Clazz {
private Integer cid;
private String cname;
@Override
public String toString() {
return "Clazz{" +
"cid=" + cid +
", cname='" + cname + '\'' +
'}';
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student01" class="com.zsb.demo.Student">
<property name="name" value="张三"/>
<property name="age" value="15"/>
<property name="clazz" ref="clazz02"/>
</bean>
<bean id="clazz02" class="com.zsb.demo.Clazz">
<property name="cid" value="1"/>
<property name="cname" value="qy151"/>
</bean>
</beans>
package com.zsb.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
Student student01 = (Student) app.getBean("student01");
System.out.println(student01);
}
}
五、注入集合类型和注入set和map集合
package com.zsb.demo;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Student {
private Integer age;
private String name;
private Clazz clazz;
private List<String> hobby;
private Set<String> set;
private Map map;
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
", clazz=" + clazz +
", hobby=" + hobby +
", set=" + set +
", map=" + map +
'}';
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public List<String> getHobby() {
return hobby;
}
public void setHobby(List<String> hobby) {
this.hobby = hobby;
}
public Clazz getClazz() {
return clazz;
}
public void setClazz(Clazz clazz) {
this.clazz = clazz;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student01" class="com.zsb.demo.Student">
<property name="name" value="张三"/>
<property name="age" value="15"/>
<property name="clazz" ref="clazz02"/>
<property name="hobby">
<list>
<value>看电视</value>
<value>听音乐</value>
<value>踢足球</value>
</list>
</property>
<property name="set">
<set>
<value>abc</value>
<value>ggg</value>
<value>dsa</value>
</set>
</property>
<property name="map">
<map>
<entry key="name" value="张三"/>
<entry key="age" value="18"/>
<entry key="sex" value="女"/>
</map>
</property>
</bean>
<bean id="clazz02" class="com.zsb.demo.Clazz">
<property name="cid" value="1"/>
<property name="cname" value="qy151"/>
</bean>
</beans>
package com.zsb.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
Student student01 = (Student) app.getBean("student01");
System.out.println(student01);
List<String> hobby = student01.getHobby();
for (String h:hobby){
System.out.println(h);
}
}
}
六、自动注入
package com.zsb.demo2;
public interface UserDao {
public void show();
}
package com.zsb.demo2;
public class UserDao1 implements UserDao{
public void show(){
System.out.println("userDao01============show方法");
}
}
package com.zsb.demo2;
public class UserDao2 implements UserDao{
public void show(){
System.out.println("userDao02!!!!!!!!!!!!show");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- <bean id="userController" class="com.zsb.demo2.UserController">-->
<!-- <property name="userDao" ref="userDao02"/>-->
<!-- </bean>-->
<bean id="userController" class="com.zsb.demo2.UserController" autowire="byType">
</bean>
<bean id="userDao01" class="com.zsb.demo2.UserDao1">
</bean>
<!-- <bean id="userDao02" class="com.zsb.demo2.UserDao2">-->
<!-- </bean>-->
</beans>
package com.zsb.demo2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test02 {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("bean02.xml");
UserController userController = (UserController) app.getBean("userController");
userController.fun();
}
}
七、使用注解完成IOC和DI功能
package com.zsb.demo3;
public interface UserDao {
public void print();
}
package com.zsb.demo3;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl01 implements UserDao{
public void print(){
System.out.println("userDao01===============print");
}
}
package com.zsb.demo3;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl02 implements UserDao{
public void print(){
System.out.println("userDao02===============print");
}
}
package com.zsb.demo3;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
@Controller(value = "userController")
public class UserController {
@Autowired
@Qualifier(value = "userDaoImpl02")
private UserDao userDao;
public void fun(){
userDao.print();
}
}
包扫描配置文件
<?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 https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.zsb.demo3"/>
</beans>
package com.zsb.demo3;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test03 {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("bean03.xml");
UserController userController = (UserController) app.getBean("userController");
userController.fun();
}
}
@Controller+@Respository+@Service+@Component
没有区别: 他们的底层都是用的@Component
实际意思就在于区分层的。
@Controller控制层
@Respository持久化层
@Service 业务层
@Component 最底层的bean注解。
分层