基于注解的IOC配置
1 明确
- 注解配置和XML配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。
- 关于实际的开发中到底是使用XML还是注解,每家公司有着不同的习惯。具体问题具体分析。
2 环境搭建
2.1 导入所需要的jar包的maven坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
2.2 使用@Component注解配置管理的资源
- IAccountService.java
package com.sunxiaping.spring5.service;
import com.sunxiaping.spring5.domain.Account;
public interface IAccountService {
void save(Account account);
}
- AcccountServiceImpl.java
package com.sunxiaping.spring5.service.impl; import com.sunxiaping.spring5.dao.IAccountDao;
import com.sunxiaping.spring5.domain.Account;
import com.sunxiaping.spring5.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component("accountService")
public class AccountServiceImpl implements IAccountService { @Autowired
private IAccountDao accountDao; @Override
public void save(Account account) {
accountDao.save(account);
}
}
- IAccountDao.java
package com.sunxiaping.spring5.dao; import com.sunxiaping.spring5.domain.Account; /**
* 账户的持久层接口
*/
public interface IAccountDao { void save(Account account);
}
- AccountDaoImpl.java
package com.sunxiaping.spring5.dao.impl; import com.sunxiaping.spring5.dao.IAccountDao;
import com.sunxiaping.spring5.domain.Account;
import org.springframework.stereotype.Component; @Component("accountDao")
public class AccountDaoImpl implements IAccountDao { @Override
public void save(Account account) {
System.out.println("保存账户信息");
}
}
- 注意:当我使用注解的时候,set方法可以不用写。
2.3 创建spring的xml配置文件并开启对注解的支持
- applicationContext.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"> <!--告知Spring创建容器的时候要扫描的包-->
<context:component-scan base-package="com.sunxiaping.spring5"></context:component-scan> </beans>
2.4 测试
- 示例:
package com.sunxiaping; import com.sunxiaping.spring5.service.IAccountService;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class spring5Test {
ApplicationContext context = null; @Before
public void before() {
context = new ClassPathXmlApplicationContext("applicationContext.xml");
} @Test
public void test() {
IAccountService accountService = context.getBean("accountService", IAccountService.class);
accountService.save(null);
} }
3 常用注解
3.1 用于创建对象的
- 相当于<bean id="" class="">
3.1.1 @Component
- 作用:把资源让Spring来管理。相当于在XML中配置一个Bean。
3.1.2 @Controller、@Service、@Repository
- 这三个注解都是针对@Component注解的衍生注解,他们的作用及属性都是一模一样的。
- 这三个注解只不过提供了更加明确的语义化。
- @Controller注解:一般用于表现层的注解。
- @Service注解:一般用于业务层的注解。
- @Repository注解:一般用于持久层的注解。
- 细节:如果注解中有且只有一个属性要赋值,并且名称是value,value在赋值的时候可以不写。
3.2 用于注入数据
- 相当于<property name="" ref=""/>和<property name="" value=""/>。
3.2.1 @Autowired
- 作用:自动按照类型注入。当使用注解注入属性的时候,set方法可以省略。它只能注入其他Bean类型。当有多个类型匹配的时候,使用要注入的对象变量名称作为Bean的id,在Spring容器中查找,找到了就注入,找不到就报错。
3.2.2 @Qualifier
- 作用:在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入的时候不能独立使用,必须和@Autowired一起使用,但是给方法参数注入的时候,可以独立使用。
- 属性:value,指定是Bean的id。
3.2.3 @Resource
- 作用:直接按照Bean的id注入。它也只能注入其他Bean类型。
- 属性:name,指的是Bean的id。
3.2.4 @Value
- 作用:注入基本数据类型和String类型。
- 属性:value,用于指定值。
3.3 用于改变作用范围
- 相当于:<bean id="" class="" scope="">。
3.3.1 @Scope注解
- 作用:指定Bean的作用范围。
- 属性:
- value,指定范围的值。
- 取值:singleton和prototype request session globalsession。
3.4 和生命周期相关的
- 相当于<bean id="" class="" init-method="" destroy-method="">。
3.4.1 @PostConstruct
- 作用:用于指定初始化方法。
3.4.2 @PreDestroy
- 作用:用于指定销毁方法。
4 关于Spring注解和XML的选择问题
4.1 注解的优势
- 配置简单,维护方便。
4.2 XML的优势
- 修改时,不需要改源代码。不涉及重新编译和部署。
基于注解的IOC配置的更多相关文章
- 10 Spring框架--基于注解的IOC配置
1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...
- spring的基于注解的IOC配置
1.配置文件配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http: ...
- Spring 基于注解的 IOC 配置
创建 spring 的 的 xml 配置 文件 <context:component-scan base-package="com.itheim"/> 指定创建容器时要 ...
- 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...
- 基于注解的形式配置Bean
基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中 I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤: 1组件 ...
- Spring 框架的概述以及Spring中基于XML的IOC配置
Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...
- spring基于注解的IoC以及IoC的案例
1.Spring中IoC的常用注解 1.1明确: (1)基于注解的配置和xml的配置要实现的功能都是一样的,都是要降低程序之间的耦合,只是配置的形式不一样 2.案例:使用xml方式和注解方式实现单表的 ...
- 基于注解的bean配置
基于注解的bean配置,主要是进行applicationContext.xml配置.DAO层类注解.Service层类注解. 1.在applicationContext.xml文件中配置信息如下 &l ...
- Struts2基于注解的Action配置
使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...
随机推荐
- flask包request搭建微服务(模拟测试桩)
from flask import Flask,requestimport json app=Flask(__name__)@app.route('/outsideWeb/integration/qr ...
- 阶段3 2.Spring_10.Spring中事务控制_9 spring编程式事务控制1-了解
编程式的事物控制,使用的情况非常少,主要作为了解 新建项目 首先导入包坐标 复制代码 这里默认值配置了Service.dao和连接池其他的内容都没有配置 也就说现在是没有事物支持的.运行测试文件 有错 ...
- springmvc 使用Jackson框架的配置
<!--start:使用Jackson 1.x的配置,需要导入的jar包:jackson-core-lpgl-xxx.jar.jackson-mapper-lgpl-xxx.jar --> ...
- kendo Ui实现搜索选中建议 不改变输入框的值
$("#SubjectFilter").kendoAutoComplete({ dataTextField: "patientCardNumber", temp ...
- 《React+Redux前端开发实战》笔记2:基于Webpack构建的Hello World案例(上)
这次搭建分为两部分:一部分是前期必要配置,一部分是开发React代码. [基于Webpack的React Hello World项目] 1.前期必要配置 (1)首先要确保读者的开发设备上已经安装过No ...
- docker安装jenkins自动化部署
Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...
- lua基础学习(三)
一.lua函数 1.在Lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些特殊的工作,也可以用来计算一些值.Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print( ...
- 2019JAVA第十次实验报告
Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间 2019.11.15 评分等级 实验代码 package Domon9; import java.awt.Font; ...
- 自带的simple认证
参考: hdfs权限: 官网http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_permissions_guide.html hdfs权限: http://dyi ...
- CF 1136C Nastya Is Transposing Matrices
题目链接:http://codeforces.com/problemset/problem/1136/C 题目分析 看了题目之后,第一想法:任意位置都可以倒置,要是枚举,铁定的超时.所以需要探索规律. ...