spring框架(二) spring的DI依赖注入与使用注解完成IOC和DI功能

1.什么是DI?

 

IOC:控制反转 创建对象!

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

2.依赖注入的类型

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

3.如何实现注入对象的属性值

创建一个类并提供set方法

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
}

创建配置文件:---在bean标签中<property name="属性名" >

<!--spring容器会帮你创建该bean的对象-->
<bean id="user" class="com.zsy.demo2.User">

        <!--property:表示为类中属性注入值,调用的为set方法
                name:表示属性名
                value:注入基本类和字符串类型时使用value
        -->
        <property name="name" value="张三"/>
        <property name="age" value="20"/>
</bean>

测试

public class Test {

    public static void main(String[] args) {

        ApplicationContext app = new ClassPathXmlApplicationContext("spring02.xml");
        User u = (User) app.getBean("user");
        System.out.println(u);
    }
}

4.使用spring注入其他数据类型

实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
    private Dept dept;
    private List list;
    private Set set;
    private Integer[] sex;
}

配置文件:  注入list、set和map集合以及数组5.

5.自动注入。

使用工厂实现自动注入

UserController

package com.zsy.demo3;

/**
 * @Author zsy
 * @Date 2022/6/13 18:21
 * @PackageName:com.zsy.demo3
 * @ClassName: UserController
 * @Description: TODO
 * @Version 1.0
 */
public class UserController {
    private IUserDao iUserDao;


    public void fun(){
        iUserDao.pint();
    }

    public void setiUserDao(IUserDao iUserDao) {
        this.iUserDao = iUserDao;
    }
}

IUserDao与UserDao1、UserDao2

public interface IUserDao {
    public void pint();
}




public class UserDao1 implements IUserDao{
    @Override
    public void pint() {
        System.out.println("------UserDao1--------");
    }
}



public class UserDao2 implements IUserDao{
    @Override
    public void pint() {
        System.out.println("--------UserDao2---------");
    }
}

配置文件

<?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.zsy.demo3.UserController" autowire="byName">
        <property name="iUserDao" ref="userDao2"/>
    </bean>

    <!--autowire:自动注入属性值
        no:不设置自动注入默认值
        byName:按照属性名称自动注入属性值
        byType:按照属性的类型自动注入。
    -->


    <bean id="userDao1" class="com.zsy.demo3.UserDao1"></bean>
    <bean id="userDao2" class="com.zsy.demo3.UserDao2"></bean>

</beans>

测试

package com.zsy.demo3;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author zsy
 * @Date 2022/6/13 18:21
 * @PackageName:com.zsy.demo3
 * @ClassName: Test
 * @Description: TODO
 * @Version 1.0
 */
public class Test {

    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("spring03.xml");
        UserController userController = (UserController) app.getBean("userController");
        userController.fun();
    }
}

6.使用注解完成IOC和DI功能

配置包扫描

<comtext:component-scan base-package="com.zsy.demo1"/>

创建controller控制层

/*表示控制层注解,如何没有设置bean的id 默认为类的名称首字母小写
相当于在spring配置文件钟<bean id=""
class="com.zsy.demo01.UserController"/>*/
@Controller
public class UserController {

    //@Autowired //按照类型自动注入 如果需要自己指定名注入需要使用另一个注解配合使用
    @Autowired
    //<property name="userDao" ref="userDaoImpl01">
    @Qualifier(value = "userDao1")
    private IUserDao iud;
    public void fun(){
        iud.show();
    }
}

  dao接口和实现类

public interface IUserDao {
    public void show();
}





@Repository
public class UserDao1 implements IUserDao{

    @Override
    public void show() {
        System.out.println("~~~~~~~~~userDao1~~~~~~~~~");
    }
}



@Repository
public class UserDao2 implements IUserDao{
    @Override
    public void show() {
        System.out.println("~~~~~~~userDao2~~~~~~~");
    }
}

测试:

@Controller+@Respository+@Service+@Component
没有区别: 底层都使用@Component
实际意义就在于区分层的。

  • @Controller控制层
  • @Respository持久化层
  • @Service 业务层
  • @Component 最底层的bean注解。

7.分层

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naaaaa.a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值