【SpringIoc】三种方式整合三层架构组件

目录

需求分析:

 一、基于XML方式整合三层架构组件

 二、基于注解方式整合三层架构组件

三、基于配置类方式整合三层架构组件


需求分析:

持久层(StudnetDao):获取数据库数据,进行数据操作

业务层(StudentService):调用持久层中的方法

表述层(StudentController):调用业务层中的方法

最终在测试环境中调用表述层的方法

 一、基于XML方式整合三层架构组件

配置文件

Spring-01.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"
       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
       http://www.springframework.org/schema/context/spring-context.xsd
       ">

    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- 配置Druid数据源组件 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" >
        <property name="url" value="${xiaowu.url}" />
        <property name="username" value="${xiaowu.username}" />
        <property name="password" value="${xiaowu.password}" />
        <property name="driverClassName" value="${xiaowu.driver}" />
    </bean>

    <!-- 配置JdbcTemplate组件 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
        <!-- 注入数据源为上面组件dataSource -->
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="studentDao" class="com.xiaowu.dao.impl.StudentDaoImpl" >
        <property name="jdbcTemplate" ref="jdbcTemplate" />
    </bean>
    <bean id="serviceImpl" class="com.xiaowu.service.impl.ServiceImpl" >
        <property name="studentDao" ref="studentDao" />
    </bean>
    <bean id="studentController" class="com.xiaowu.controller.StudentController" >
        <property name="serviceImpl" ref="serviceImpl" />
    </bean>
</beans>

 jdbc.properties

xiaowu.url=jdbc:mysql://localhost:3306/studb
xiaowu.driver=com.mysql.cj.jdbc.Driver
xiaowu.username=root
xiaowu.password=123456

持久层 

//接口
public interface StudentDao {
    List queryAll();
}

public class StudentDaoImpl implements StudentDao {
    private JdbcTemplate jdbcTemplate;


    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public List queryAll() {
        String sql = "select * from students";
        List students = jdbcTemplate.queryForList(sql);

        return students;
    }
}

业务层

public interface Service {
    List findAll();
}

public class ServiceImpl implements Service {
    private StudentDao studentDao;

    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    @Override
    public List findAll() {
        List students = studentDao.queryAll();
        System.out.println("students:" + students);

        return students;
    }
}

表述层

public class StudentController {
    private ServiceImpl serviceImpl;

    public void setServiceImpl(ServiceImpl serviceImpl) {
        this.serviceImpl = serviceImpl;
    }

    public void findAll() {
        List students = serviceImpl.findAll();
        System.out.println("最终成绩:" + students);
    }
}

运行测试

public class StudentControllerTest {
    @Test
    public void tset() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-jdbc.xml");
        StudentController studentController = applicationContext.getBean(StudentController.class);
        studentController.findAll();
    }
}

 二、基于注解方式整合三层架构组件

配置文件

Spring-02.xml

使用注解的方式不需要将自己写的组件写入配置文件,只需要在组件上写注解后,在xml配置文件中配置组件扫描哪个包即可

不是自己所写的组件仍然需要在xml中正常配置,因为第三方jar包为只读模式

<?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
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 导入外部属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <!-- 配置组件扫描 -->
    <context:component-scan base-package="com.xiaowu.dao,com.xiaowu.service,com.xiaowu.controller" />

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" >
        <property name="url" value="${xiaowu.url}" />
        <property name="driverClassName" value="${xiaowu.driver}" />
        <property name="username" value="${xiaowu.username}" />
        <property name="password" value="${xiaowu.password}" />
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

jdbc.properties

xiaowu.url=jdbc:mysql://localhost:3306/studb
xiaowu.driver=com.mysql.cj.jdbc.Driver
xiaowu.username=root
xiaowu.password=123456

持久层

public interface StudentDao {
    List quaryAll();
}

@Repository // 持久层组件注解
public class StudentDaoImpl implements StudentDao {
    @Autowired  // 自动进行依赖注入
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Students> quaryAll() {
        String sql = "select * from students";
        List students = jdbcTemplate.queryForList(sql);
        return students;
    }
}

业务层

public interface StudentService {
    List<Students> findAll();
}


@Service    // 业务层组件注解
public class ServiceImpl implements StudentService {
    @Autowired
    private StudentDao studentDao;

    /* 这里的set方法没有意义,因为它已经被@Autowired注解代替了
    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }
    */

    @Override
    public List<Students> findAll() {
        List students = studentDao.quaryAll();
        System.out.println("成绩:" + students);
        return students;
    }
}

表述层

public interface StudentController {
    List findAll();
}

@Controller // 控制层组件注解
public class StudentControllerImpl implements StudentController {
    @Autowired
    private StudentService service;


    @Override
    public List findAll() {
        List students = service.findAll();
        System.out.println(students);
        return students;
    }
}

运行测试

public class test {
    @Test
    public void test1() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-01.xml");
        StudentControllerImpl studentController = applicationContext.getBean(StudentControllerImpl.class);
        studentController.findAll();
    }

}

三、基于配置类方式整合三层架构组件

只需要将注解方式的xml配置转换成配置类即可

配置类

com.xiaowu.config.MyConfig

// 解读取外部配置,替代 <context:property-placeholder标签
@PropertySource("classpath:jdbc.properties")
// 配置扫描包,替代<context:component-scan标签
@ComponentScan({"com.xiaowu.dao","com.xiaowu.service","com.xiaowu.controller"})
// 标注当前类是配置类,替代application.xml
@Configuration
public class MyConfig {
    /*
    @Value("${xiaowu.url}")
    private String url;
    @Value("${xiaowu.driver}")
    private String driver;
    @Value("${xiaowu.username}")
    private String userName;
    @Value("${xiaowu.password}")
    private String password;
     */

    @Bean
    // 如果这些属性只在这个方法中使用,可以使用形参列表引入
    public DataSource dataSource(
            @Value("${xiaowu.url}") String url,
            @Value("${xiaowu.driver}") String driver,
            @Value("${xiaowu.username}") String userName,
            @Value("${xiaowu.password}") String password
    ) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driver);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);

        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        return jdbcTemplate;
    }
}

测试运行

public class test {
    @Test
    public void test1() {
        // AnnotationConfigApplicationContext 根据配置类创建 IOC 容器对象
        AnnotationConfigApplicationContext applicationContext
                = new AnnotationConfigApplicationContext(MyConfig.class);
        StudentControllerImpl studentController = applicationContext.getBean(StudentControllerImpl.class);
        studentController.findAll();

    }

}

 其余于注解方式一致

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值