资讯专栏INFORMATION COLUMN

Spring笔记02_注解_IOC

smartlion / 3383人阅读

摘要:约束的位置可以在约束的位置在中找到开启注解扫描器在配置文件中开启注解扫描器开启注解扫描器包含自己以及自己下面的所有子包告知框架,在读取配置文件,创建容器时,依据注解创建对象,并存入容器中使用注解要创建对象,在类上使用注解。

1. Spring整合连接池 1.1 Spring整合C3P0

在工程中导入c3p0连接池需要的包com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar

c3p0的硬编码方式

@Test    //自己new对象,自己设置属性
    public void test() throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //设置驱动
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        //设置地址
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/hibernate");
        //设置用户名
        dataSource.setUser("root");
        //设置密码
        dataSource.setPassword("2626");
        //获取链接池连接对象
        Connection con = dataSource.getConnection();
        System.out.println(con);
        //com.mchange.v2.c3p0.impl.NewProxyConnection@26ba2a48
    }

Spring整合c3p0连接池

配置文件


    
        
        
        
        
    

测试

@Test    //Spring的IOC+DI替代以上硬编码的方式
    public void test2() throws SQLException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = (DataSource) context.getBean("C3P0");
        Connection con = dataSource.getConnection();
        System.out.println(con);
        //com.mchange.v2.c3p0.impl.NewProxyConnection@52aa2946
    }

1.2 Spring整合DBCP

导入DBCP连接池需要的包com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar和com.springsource.org.apache.commons.pool-1.5.3.jar

DBCP硬编码方式

@Test    //DBCP的硬编码方式
    public void test3() throws SQLException {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/hibernate");
        dataSource.setUsername("root");
        dataSource.setPassword("2626");
        Connection con = dataSource.getConnection();
        System.out.println(con);
        //jdbc:mysql://localhost:3306/hibernate, UserName=root@localhost, MySQL-AB JDBC Driver
    }

Spring整合DBCP

配置文件


    
        
        
        
        
    

测试

@Test
    public void test4() throws SQLException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = (DataSource) context.getBean("DBCP");
        Connection con = dataSource.getConnection();
        System.out.println(con);
        //jdbc:mysql://localhost:3306/hibernate, UserName=root@localhost, MySQL-AB JDBC Driver
    }

1.3 最终版

最终版使用propertie配置文件,Spring加载properties文件

Spring提供了一个标签可以加载外部的properties文件内容

导入context的名称空间和约束后,xml文件中才会有提示,这个约束在/spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html/xsd-configuration.html中可以找到


 

导入约束后配置xml



    
    
        
        
        
        
    

测试

@Test
    public void test4() throws SQLException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = (DataSource) context.getBean("DBCP");
        Connection con = dataSource.getConnection();
        System.out.println(con);
        //jdbc:mysql://localhost:3306/hibernate, UserName=root@localhost, MySQL-AB JDBC Driver
    }

jdbc.properties配置文件可以配置不同的数据库,切换方便。

2. 基于注解的IOC配置

注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置形式不一样。至于是使用xml还是注解,实际的开发过程中,每家公司有不同的习惯。

2.1 导包

拷贝必备包到lib目录下。基于注解的配置中,需要加入一个aop的jar包。

2.2 配置文件

基于注解的配置文件,导入约束时需要多导入一个context名称空间下的约束。约束的位置可以在约束的位置在:

​ ..spring-framework-4.2.4.RELEASEdocsspring-framework-referencehtmlxsd-configuration.html中找到



2.3 开启注解扫描器

在配置文件中开启注解扫描器



        

告知Spring框架,在读取配置文件,创建容器时,依据注解创建对象,并存入容器中

2.4 使用注解

要创建UserDaoImpl对象,在类上使用@Component注解。只要定义在类上,那么注解扫描器只要一扫描到就会创建该类的实例对象,放入Spring容器中。

package com.itzhouq.daoImpl;

import org.springframework.stereotype.Component;

import com.itzhouq.dao.UserDao;

@Component("userDao")    //
public class UserDaoImpl implements UserDao{

    @Override
    public void save() {
        System.out.println("操作数据库,保存用户的数据");
    }
}

要创建的对象UserServiceImpl,在类上使用注解,在属性上使用注解

@value("属性值"):定义在属性字段上,针对的是基本数据类型和String类型。如果使用了这个注解,该属性的set方法可以省略不写。

@Autowired:定义在属性字段上,针对的是对象类型。自动按照类型注入,当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时,使用要注解的对象变量名作为bean的id,在Spring容器查找,找到了也可以注入成功,找不到就报错。

@Qualifier("对象属性id"):定义在属性字段上。在自动按照类型注入的基础上,再按照Bean的id注入。他在给字段注入时,不能独立使用,必须和@Autowired一起使用。但是给方法参数注入时,可以独立使用。

package com.itzhouq.serviceImpl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.itzhouq.dao.UserDao;
import com.itzhouq.daoImpl.UserDaoImpl;
import com.itzhouq.service.UserService;

@Component("userService")    //
public class UserServiceImpl implements UserService {
    @Value("要开始访问dao了")    //
    private String name;    //使用注解,可以不需要set方法,相当于直接赋值
    
    @Autowired    //对象类型:自动去Spring容器中找有没有该类型(UserDao)的实例对象  如果有直接赋值
    @Qualifier("userDao")
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void save() {
        System.out.println(name);
        //调用dao
        userDao.save();
    }
}

测试

@Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) context.getBean("userService");
        userService.save();
        //要开始访问dao了
        //操作数据库,保存用户的数据
    }

2.5了解的几个注解

@Scope("singleton") / @Scope("prototype"):定义在类上,用于指定该类是单实例还是多实例

一般action/web层为多实例,service和dao层为单实例

@PostConstruct:定义在方法上,用于配置初始化方法

@PreDestroy:定义在方法上,用于配置销毁的方法

3. Spring整合JUnit

3.1 导入包

spring-aop-4.2.4.RELEASE.jar

spring-test-4.2.4.RELEASE.jar

junit.jar

3.2 编写测试类
package com.itzhouq.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.itzhouq.service.UserService;

//1. 告诉Spring配置文件的位置
//2. 告诉Spring谁去加载配置文件
@ContextConfiguration(value="classpath:applicationContext.xml")
@RunWith(value=SpringJUnit4ClassRunner.class)
public class SpringJunit {
    @Autowired
    private UserService userService;
    
    @Test
    public void test() {
        userService.save();
//        要开始访问dao了
//        操作数据库,保存用户的数据
    }
}
3.3 注解

使用@RunWith注解替换原有运行器

使用@ContextConfiguration指定spring配置文件的位置

使用@Autowired给测试类中的变量注入数据

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74389.html

相关文章

  • Spring笔记01_下载_概述_监听器

    摘要:简单来说,是一个轻量级的控制反转和面向切面的容器框架。变成的支持提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能。用于反射创建对象,默认情况下调用无参构造函数。指定对象的作用范围。 1.Spring介绍 1.1 Spring概述 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert...

    reclay 评论0 收藏0
  • Spring注解专题系列

    摘要:用法先创建个组件,,,分别在类上加上注解。发现有一个属性源码注释这样说的自动检测使用组件。在的方法中,表示不匹配,代表匹配。这就说明使用注册组件有种方式。 Spring注解应用篇--IOC容器Bean组件注册 这是Spring注解专题系类文章,本系类文章适合Spring入门者或者原理入门者,小编会在本系类文章下进行企业级应用实战讲解以及spring源码跟进。 环境准备 编译器IDEA...

    CocoaChina 评论0 收藏0
  • Spring框架学习笔记(一):官方文档介绍,IoC与AOP概念学习

    摘要:构造函数注入通过调用类的构造函数,将接口实现类通过构造函数变量传入。而在中,其使用横切技术,将这类代码从原属的封装对象中提取出来,封装到一个可重用模块中,称为。 最近实习用到Spring的开发框架,但是之前没有接触过,因此希望利用网上的资源来学习以下。 Spring官方给出了非常全面的介绍,非常适合我这种完全的小白……在这一系列学习中,我阅读的主要资源是5.1.2 Reference ...

    mindwind 评论0 收藏0
  • Spring入门IOC和AOP学习笔记

    摘要:入门和学习笔记概述框架的核心有两个容器作为超级大工厂,负责管理创建所有的对象,这些对象被称为。中的一些术语切面切面组织多个,放在切面中定义。 Spring入门IOC和AOP学习笔记 概述 Spring框架的核心有两个: Spring容器作为超级大工厂,负责管理、创建所有的Java对象,这些Java对象被称为Bean。 Spring容器管理容器中Bean之间的依赖关系,使用一种叫做依赖...

    wenyiweb 评论0 收藏0
  • 慕课网_Spring入门篇》学习总结

    摘要:入门篇学习总结时间年月日星期三说明本文部分内容均来自慕课网。主要的功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。 《Spring入门篇》学习总结 时间:2017年1月18日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://git...

    Ververica 评论0 收藏0

发表评论

0条评论

smartlion

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<