spring学习(一)——解耦

  程序的耦合

耦合:程序间的依赖关系
 *          包括:
 *              类之间的依赖
 *              方法间的依赖

  解耦:降低程序间的依赖关系

 *      实际开发中:
 *          应该做到:编译期不依赖,运行时才依赖
 *      解耦的思路:
 *          第一步:使用反射来创建对象,而避免使用new关键字。
 *          第二步:通过读取配置文件来获取要创建的对象全限定类名

* Bean:在计算机英语中,有可重用组件的含义。
* JavaBean:用java语言编写的可重用组件(  javabean >  实体类) 它就是创建我们的service和dao对象的。
1):需要一个配置文件来配置我们的service和dao,配置的内容:唯一标识=全限定类名(key=value), 我的配置文件可以是xml也可以是properties

//实例化对象,用于装载properties文件内的配置信息
 props = new Properties();
//获取properties文件的流对象
InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
props.load(in);
//根据beanName获取beanPath
String beanPath = props.getProperty(beanName);

2)通过读取配置文件中配置的内容,反射创建对象

 Object value = Class.forName(beanPath).newInstance();


Ioc:控制反转 

依赖注入pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>day01_eesy_03spring</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
    </dependencies>
</project>

 配置文件:

<?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">

   
 <!--把对象的创建交给spring来管理-->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>

    <bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"></bean>
</beans>

主程序

public static void main(String[] args) {
        //1.获取核心容器对象,bean.xml为配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//        ApplicationContext ac = new FileSystemXmlApplicationContext("C:\\Users\\zhy\\Desktop\\bean.xml");
        //2.根据id获取Bean对象,两种写法
        IAccountService as  = (IAccountService)ac.getBean("accountService");
        IAccountDao adao = ac.getBean("accountDao",IAccountDao.class);
}

* ApplicationContext的三个常用实现类:
     *      ClassPathXmlApplicationContext:它可以加载类路径下的配置文件,要求配置文件必须在类路径下(更常用)
     *      FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限)
     *      AnnotationConfigApplicationContext:它是用于读取注解创建容器的

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页