SpringIoc学习笔记(xml方式)

  Spring:JavaEE开发的一站式框架,针对开发的每一层都有解决方案。

  • web层:SpringMVC
  • service层:Spring的bean管理,声明式事务管理
  • dao层:Spring的jdbc模板,Spring的ORM模块
    Ioc:Inversion of Control(控制反转)
    控制反转:将对象的创建权交给spring管理
    好处:降低程序间的耦合度
    IOC入门案例:创建一个maven工程
    在这里插入图片描述

dao接口UserDao

public interface UserDao {
    
    
    /*
    * dao层保存用户
    * */
    void saveUser();
}

dao接口实现类UserDao

public class UserDaoImpl implements UserDao {
    
    
    /*
    * 模拟保存用户
    * */
    public void saveUser() {
    
    
        System.out.println("dao层保存用户...成功");
    }
}

service接口UserService

public interface UserService {
    
    
    /*
    * 保存用户
    * */
    void saveUser();
}

service接口实现类UserServiceImpl

public class UserServiceImpl implements UserService {
    
    
    /*
    * 模拟保存用户
    * */
    public void saveUser() {
    
    
        System.out.println("service层保存用户...成功");
    }
}

bean.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
       bean标签:用于配置让spring创建对象,并且存入ioc容器之中
       id属性:对象的唯一标识,标识单个bean定义的字符串。
       class属性:定义Bean的类型,并使用完全限定的类名
    -->
    <!--  配置dao对象  -->
    <bean id="userDao" class="com.yt.dao.impl.UserDaoImpl"></bean>
    <!--  配置service对象  -->
    <bean id="userService" class="com.yt.service.impl.UserServiceImpl"></bean>
</beans>

pom文件

 <dependencies>
        <!---->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

测试类IocTest :

public class IocTest {
    
    
    public static void main(String[] args) {
    
    
        //使用ApplicationContext接口获取spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        //根据bean的id获取对象
        UserService service = (UserService) context.getBean("userService");
        //调用方法该对象中的保存方法
        service.saveUser();
        System.out.println(service);
        UserDao dao = (UserDao) context.getBean("userDao");
        dao.saveUser();
        System.out.println(dao);
    }
}

运行结果:
在这里插入图片描述
IOC和DI(面试会问)
     IOC:控制反转,将对象的创建权反转给了Spring。
     DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
BeanFactory和ApplicationContext的区别
     BeanFactory 是 Spring 容器中的顶层接口,ApplicationContext 是它的子接口。
  两者区别: 创建对象的时间点不一样。
     ApplicationContext:实现是立即加载的方式,只要一读取配置文件,默认情况下就会创建对象。
     BeanFactory:实现是懒加载的方式,只有调用getBean()方法的时候,才会生成类的实例。
ApplicationContext 接口的实现类:
     ClassPathXmlApplicationContext:它是从类的根路径下加载配置文件推荐使用这种方式。
     FileSystemXmlApplicationContext:它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置(必须要有访问权限)。
     AnnotationConfigApplicationContext:当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
Bean的相关的配置:
     作用:用于配置对象让 spring容器来创建的,默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。
     属性:
     id:使用了约束中的唯一约束。里面不能出现特殊字符的。
     name:没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的),里面可以出现特殊字符。
     class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
加油吧少年

猜你喜欢

转载自blog.csdn.net/qq_42494654/article/details/110888854