Spring框架(4)--Spring注解开发

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替核心配置文件中的依赖注入可以达到简化配置的效果,提高开发效率。

几个常用的原始注解:

创建对象的注解:

注解 说明
@Component 使用在类上,用于实例化Bean
@Controller 使用在web层类上,用于实例化Bean
@Service 使用在service层类上,用于实例化Bean
@Repository 使用在dao层类上用于,实例化Bean

依赖注入的注解:

注解 说明
@Autowired 根据类型依赖注入,如果找到多个,则根据变量名依赖注入
@Qualifier 与@Autowired一起使用,用于根据名称进行依赖注入
@Resource 相当于@[email protected],按照名称进行注入
@Value 注入普通属性。一般用于获取properties中的key,然后注入成员变量中

作用范围的注解:

注解 说明
@Scope 两个取值:“prototype” -> 多例的,“singleton” -> 单例的(默认)

其他注解:

注解 说明
@PostConstruct 被标注的方法,在对象被创建的时候执行
@PreDestroy 被标注的方法,在对象被销毁的时候执行

等等等等,但是使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下:

非自定义的Bean的配置:<bean>

加载properties文件的配置:<context:property-placeholder>

组件扫描的配置:<context:component-scan>

引入其他文件:<import>

还有一些Spring的新注解:Spring所谓的新注解,就是用来完全替代Spring的配置文件用的。

注解 说明
@Configuration 用于指定当前类是一个 Spring配置类,当创建容器时会从该类上加载注解
@ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。
@Bean 使用在方法上,标注将该方法的返回值存储到 Spring 容器中
@PropertySource 用于加载.properties 文件中的配置
@Import 用于导入其他配置类

案例仅供参考:

//表示该类是一个Spring的配置类,用来存放spring的配置信息
@Configuration
public class SpringConfiguration {

}
//用于指定 Spring 在初始化容器时要扫描的包。
//相当于xml配置时的`<context:component-scan base-package="com.itheima"/>`

@Configuration
@ComponentScan("com.itheima")
public class SpringConfiguration {

}
//用于导入其他的配置类
//相当于xml配置时的`<import resource="classpath:applicationContext-dao.xml"/>`

@Configuration
@ComponentScan("com.itheima")
@Import({DataSourceConfiguration.class})
public class SpringConfiguration {
}
//用于properties配置文件
//相当于xml配置时的`<context:property-placeholder location="classpath:jdbc.properties"/>`

@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {
    @Value("${jdbc.driver}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;
}
//使用在方法上,Spring会自动执行该方法,并把方法返回的对象,存储在spring容器中

@Bean("dataSource")
public DataSource getDataSource() throws PropertyVetoException {
    ComboPooledDataSource ds = new ComboPooledDataSource();
    ds.setDriverClass(driver);
    ds.setJdbcUrl(url);
    ds.setUser(username);
    ds.setPassword(password);
    return ds;
} 

测试新注解:

@Test
public void testAnnoConfiguration() throws Exception {
    //根据配置类SpringConfiguration.class,获取Spring的核心容器
    ApplicationContext ac =
            new AnnotationConfigApplicationContext(SpringConfiguration.class);

    //获取userService对象
    UserService userService = (UserService)ac.getBean("userService");
    userService.save();

    //获取dataSource对象
    DataSource dataSource = (DataSource)ac.getBean("dataSource");
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
}

使用注解开发的步骤:

1.导入坐标:因为我们采用的是C3P0,所以要导入

 1      <dependency>
 2             <groupId>c3p0</groupId>
 3             <artifactId>c3p0</artifactId>
 4             <version>0.9.1.2</version>
 5         </dependency>
 6         <dependency>
 7             <groupId>mysql</groupId>
 8             <artifactId>mysql-connector-java</artifactId>
 9             <version>5.1.47</version>
10         </dependency>
11         <dependency>
12             <groupId>org.springframework</groupId>
13             <artifactId>spring-jdbc</artifactId>
14             <version>5.0.5.RELEASE</version>
15         </dependency>

2.编写实现功能的接口和类:

 1 public interface UserService {
 2     public List<User> findAll() throws SQLException;
 3 }
 4
 5
 6
 7 @Service
 8 public class UserService implements com.itcast.Service.UserService {
 9
10     @Autowired//注解注入
11     private UserDao userDao;
12
13     public List<User> findAll() throws SQLException {
14         List<User> users = userDao.findAll();
15         return users;
16     }
17 }
//接口:
public interface UserDao {
    public List<User> findAll() throws SQLException;
}

//实现类:
@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private DataSource dataSource;

    public List<User> findAll() throws SQLException {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        List<User> users = jdbcTemplate.query("select * from userform", new BeanPropertyRowMapper<User>(User.class));
        return users;
    }
}

3.配置核心配置文件applicationContext:

<?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:component-scan base-package="com.itcast"></context:component-scan>

    <!--配置C3P0链接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///daynov06"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

</beans>

4.编写测试类:

 1 public class Demo1 {
 2     public static void main(String[] args) throws SQLException {
 3
 4         //读取配置文件
 5         ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
 6         //从spring中获取目标对象
 7         UserService bean = app.getBean(UserService.class);
 8         //调用方法
 9         List<User> all = bean.findAll();
10         for (User user : all) {
11             System.out.println(user);
12         }
13
14     }
15 }

完成测试。

其他的注解可以查看功能相应的进行练习。

原文地址:https://www.cnblogs.com/j9527/p/12032054.html

时间: 2024-10-09 08:10:17

Spring框架(4)--Spring注解开发的相关文章

Spring框架中利用注解进行自动装配的环境配置步骤和常见问题

第1步:配置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.spring

spring+springmvc+mybatis-plus 纯注解开发

最近刚完成一个项目,刚好有一点时间,来完成基于spring+springmvc+mybatis-plus 纯注解开发 一.创建工程.导入依赖 1.新建一个基于maven的web工程,使用JDK1.8 2.调整目录结构 2.1.新建java 2.2.新建resources 2.3.删除web.xml.构建基础包 2.4.工程目录构建完成展示 2.配置tomcat服务器 2.1.服务器配置 2.2.测试服务器配置 3.pom.xml文件配置 1 <properties> 2 <project

深入浅出,了解 Spring 框架和 Spring Boot 的历史

Spring 框架可以说是 Java 开发人员使用的最流行的应用程序开发框架之一.它目前由大量提供一系列服务的模块组成.包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存取框架,Web 应用框架和用于模块测试提供支持的类.Spring 框架的所有组件都通过依赖注入粘在一起.依赖注入(也称为控制反转)使设计和测试松散耦合的软件模块变得更容易. 多年来 Spring 框架已变得足够成熟.几乎所有 Java 企业应用需要用到的基础组件都可以在 Spring 框架中找到.但

Spring框架之使用JdbcTemplate开发Dao层程序

简介: JdbcTemplate开发dao层程序     由Spring框架给我们提供,Spring提供的很多操作数据源(关系型数据库,二维表格模型,有明确的行和列(mysql/orcal等) 非关系型数据库(redis.mongodb)NoSQL)消息列(activeMq,jms)的小工具 JdbcTemplate操作关系数据库 RedisTemplate操作redis JmsTtemplate操作消息队列 JdbcTemplate类 使用方法和QueryRunner基本一致. 构造方法传递数

Spring框架总结(四)——注解

前面几节,通过配置xml文件,可以实现Spring 控制反转的依赖注入.不过,如果一个类中,存在很多属性.依赖不止一个目标,此时这种基于xml配置的方式就显得非常繁琐.幸好,Spirng提供了几种技巧,可以帮助我们减少xml的配置数量 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让spring自动识别如何装配Bean的依赖关系 自动检测(autodiscovery)比自动装配更进了一步,让Spring能够自

Spring框架4:Spring使用注解和XML配置控制反转(IOC)

本系列笔记均是对b站教程https://www.bilibili.com/video/av47952931 的学习笔记,非本人原创 注解配置IOC 注解配置和基于xml的配置功能是一样的,只是配置形式不一样 这里以一个项目为例,项目还是之前的那个 AccountDAOImpl: package com.jiading.dao.impl; import com.jiading.dao.IAccountDAO; import org.springframework.stereotype.Reposi

Spring框架学习——AOP的开发

一.AOP开发中的相关术语. ——JoinPoint(连接点):指那些可以被拦截到的点.比如增删改查方法都可以增强,这些方法就可以被称为是连接点. ——PointCut:切入点,真正被拦截的点,指对哪些连接点进行拦截的定义.JoinPoint是指方法可以增强,而切入点就是实际哪个方法进行增强或修改,这样的方法被称为切入点. ——Advice(增强/通知):方法层面的增强.指拦截到了方法后需要做的事情,也就是增强的功能部分被称为通知.分为前置(方法主体之前).后置.环绕通知. ——Introduc

详解Java的Spring框架中的注解的用法

转载:http://www.jb51.net/article/75460.htm 1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: class UserManagerImpl implements UserManager { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } ... } 配置文件: <bean id=&qu

Spring框架:Spring安全

在传统的Web开发中,安全性的代码都是分散在各个模块中的,这样不方便管理,而且有时候可能会漏掉一个地方导致安全漏洞.为了解决这个问题,有人发明了Spring Security.它的作用是将业务逻辑中有关安全的代码全都移动到一个模块中集中管理.本质上是AOP的一个子集. 过滤URL 为了过滤URL,首先要在web.xml中加入一个过滤器.filter-name不能随便填写,因为它和另外一个bean的名称是一样的. <filter> <filter-name>springSecurit

Spring框架学习-Spring和IOC概述

一:什么是Spring框架? spring是一个分层的javase/EEfull-stack(一站式)轻量级的java开源框架.是为了解决企业开发的复杂性而创建的.框架的主要优势是分层架构,Spring的核心是控制反转(IOC)和面向切面(AOP). 二.学习Spring的好处? 主要就是方便解耦,简化开发 Spring就像一个工厂,可以将所有对象创建和依赖关系维护,都交给Spring管理. AOP编程的支持 Spring提供面向切面编程,可以方便的实现对程序进行权限拦截.运行监控等功能. 声明