Java-Spring框架-2(DI注入)

一、什么是DI?

IOC:控制反转 创建对象!

DI 依赖注入:目的就是给对象中的属性赋值。

二、依赖注入的类型有哪些?

基本数据类型, 字符串类型,引用类型,集合类型。

三、注入对象属性值的实现

1.创建一个类,并提供set方法

public class Student {
     private Integer age;
     private String name;

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("这是setName方法*****************");
        this.name = name;
    }
}

2.配置spring文件

 <!--spring容器会帮我们创建bean对象-->
    <bean id="student01" class="com.gsh.demon01.Student">
        <!--property:表示为类中属性注入值,注入值使用的是set方法-->
        <!--name:表示属性名-->
        <!--value:表示注入基本类和字符串类型时使用-->
        <property name="name" value="张三"/>
        <property name="age" value="23"/>
  </bean>
</beans>

3.测试

public static void main(String[] args) {
        //读取配置文件
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
        //获取当前bean
        Student student01 = (Student) applicationContext.getBean("student01");
}

四、使用Spring注入对象数据类型属性

1.创建Clazz类

//创建班级对象
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;
    }
}

2.在Student类下创建Clazz属性

   private Clazz clazz;//班级对象,引用类型

3. 配置spring文件

 五、注入集合类型属性

1.在Student类中添加List属性

 private List<String> hobby;

2.配置spring文件

        <property name="hobby">
            <list>
                <value>听音乐</value>
                <value>睡觉</value>
            </list>
        </property>

六、注入set和map集合

1.在Student类中添加set和map属性

    private Set<String> set;
    private Map map;

2.配置spring文件

<property name="set">
            <set>
                <value>abc</value>
                <value>abc</value>
                <value>aba</value>
                <value>abb</value>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="name" value="张三"/>
                <entry key="address" value="北京"/>
                <entry key="age" value="23"/>
            </map>
        </property>

七、spring自动注入

1.创建接口类UserDao

public interface UserDao {
    public void show();
}

2.创建两个UserDao并实现UserDao接口

public class UserDao01 implements UserDao{
    @Override
    public void show() {
        System.out.println("这是userDAO1");
    }
}
public class UserDao02 implements UserDao{
    @Override
    public void show() {
        System.out.println("这是UserDAO2");
    }
}

3.创建一个实现类UserController

public class UserController {
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void fun(){
        userDao.show();
    }
}

4.配置spring文件

<!--autowire:自动注入属性-->
    <!--no:不设置自动注入 默认值-->
    <!--byName:按照属性名称自动注入到属性值-->
    <!--byType:按照属性的类型自动注入-->
    <bean id="userController" class="com.gsh.demon02.UserController" autowire="byType"></bean>
    <bean id="userDao02" class="com.gsh.demon02.UserDao02"></bean>

八、使用注解完成IOC和DI

1.扫描包(为的是扫描注解)

   <!--扫描包   -->
    <context:component-scan base-package="com.gsh.demon03"/>

2.创建一个Controller层并使用注解

//表示控制层注解,如果没有设置bean的id默认类名为类名称的名称且首字母小写
//这一步等价与在spring配置文件中 配置bean
@Controller
public class UserController {
    //按照类型的自动注入 如果需要自己指定名称注入需要使用另一个注解配合使用
    @Autowired
    //等同于 <property: name ="userDao" ref="userDaoImpl01"
    @Qualifier(value = "userDaoImpl02")
    private UserDao userDao;
    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void fun(){
        userDao.print();
    }
}

@Controller+@Respository+@Service+@Component
没有区别: 他们的底层都是用的@Component
实际意思就在于区分层的。
@Controller控制层
@Respository持久化层
@Service 业务层
@Component 最底层的bean注解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值