spring 注解简单使用
一、通用注解
1、项目结构:
2、新建Person类,注解@Component未指明id,则后期使用spring获取实例对象时使用默认id="person"方式获取或使用类方式获取
package hjp.spring.annotation.commen; import org.springframework.stereotype.Component; //@Component
@Component("personId")
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
Person
3、新建beans.xml文件,相比之前配置多了
xmlns:context="http://www.springframework.org/schema/context"
和
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
不再使用bean节点配置,而是使用context:component-scan节点,属性base-package指明要扫描注解的包
<?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">
<!-- <bean id="personId" class="hjp.spring.annotation.commen.Person"></bean> -->
<context:component-scan base-package="hjp.spring.annotation.commen"></context:component-scan>
</beans>
4、新建测试类
package hjp.spring.annotation.commen; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component; public class TestApp {
@Test
public void demo1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"hjp/spring/annotation/commen/beans.xml");
//注解未指定id时,默认id为person
//Person person = applicationContext.getBean("person", Person.class);
//注解指定id,即@Component("personId")时
//Person person = applicationContext.getBean("personId",Person.class);
//不管是否指定id,使用类方式获取实例都可以
Person person = applicationContext.getBean(Person.class);
System.out.println(person);
}
}
测试类
二、衍生三层开发注解
@Controller 修饰Web层;@Service 修饰service层;@Repository 修饰dao层
依赖注入:方式1、普通数据 @Value
方式2、引用数据 @Autowired,默认按照类型进行注入;如果想要按照名称进行注入,还需要使用注解@Qualifier("名称")
1、项目结构
2、新建UserDao类
package hjp.spring.annotation.web; import org.springframework.stereotype.Repository; //@Repository
@Repository("userDaoId")
public class UserDao {
public void save() {
System.out.println("add user");
}
}
UserDao
3、新建UserService类
package hjp.spring.annotation.web; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; @Service
public class UserService {
@Autowired
//@Qualifier("userDaoId") //指向UserDao类注解@Repository("userDaoId")指定的Id
//属性注入也可以使用注解@Resource
//@Resource
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void addUser() {
userDao.save();
}
}
UserService
4、新建UserAction类
package hjp.spring.annotation.web; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; @Controller("userActionId")
//@Scope("prototype")//多例
public class UserAction {
@Autowired
private UserService userService; public void setUserService(UserService userService) {
this.userService = userService;
}
public void execute() {
userService.addUser();
}
}
UserAction
5、新建测试类
package hjp.spring.annotation.web; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestApp {
@Test
public void demo1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"hjp/spring/annotation/web/beans.xml");
UserAction userAction = applicationContext.getBean("userActionId", UserAction.class);
System.out.println(userAction);//用于测试单例和多例
userAction.execute();
userAction=applicationContext.getBean("userActionId", UserAction.class);
System.out.println(userAction);//用于测试单例和多例
}
}
测试类
6、新建beans.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">
<!-- <bean id="personId" class="hjp.spring.annotation.commen.Person"></bean> -->
<!-- 让spring对含有注解的类进行扫描 -->
<context:component-scan base-package="hjp.spring.annotation.web"></context:component-scan>
</beans>
beans.xml
三、其他注解:如@PostConstruct修饰初始化;@PreDestroy修饰销毁
四、项目中对XML和注解的使用情况
1、纯XML,整合第三方(jar包)
2、纯注解,限制条件必须有源码,简化代码开发
3、xml+注解,xml配置bean,代码中使用注入注解
如果混合使用不需要扫描,只需要加入<context:annotation-config></context:annotation-config>配置
测试Demo可以将UserDao类的@Repository、UserService类的@Service、UserAction类的@Controller去掉,只保留注入注解,
然后修改beans.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"> <!-- 只使用注入的注解 -->
<bean id="userDaoId" class="hjp.spring.annotation.web.UserDao"></bean>
<bean id="userServiceId" class="hjp.spring.annotation.web.UserService"></bean>
<bean id="userActionId" class="hjp.spring.annotation.web.UserAction"></bean>
<context:annotation-config></context:annotation-config>
</beans>
spring 注解简单使用的更多相关文章
- spring注解简单记录
@Autowired 自动匹配,按类型 @qualifiter("beanname") 当有多个bean匹配时,可指定bean名称 @Resource byname优先匹配,然后b ...
- spring注解开发中常用注解以及简单配置
一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...
- Spring boot 注解简单备忘
Spring boot 注解简单备忘 1.定义注解 package com.space.aspect.anno;import java.lang.annotation.*; /** * 定义系统日志注 ...
- Spring Aop(二)——基于Aspectj注解的Spring Aop简单实现
转发地址:https://www.iteye.com/blog/elim-2394762 2 基于Aspectj注解的Spring Aop简单实现 Spring Aop是基于Aop框架Aspectj实 ...
- spring注解源码分析--how does autowired works?
1. 背景 注解可以减少代码的开发量,spring提供了丰富的注解功能.我们可能会被问到,spring的注解到底是什么触发的呢?今天以spring最常使用的一个注解autowired来跟踪代码,进行d ...
- Spring cache简单使用guava cache
Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...
- Spring注解
AccountController .java Java代码 1. /** 2. * 2010-1-23 3. */ 4. packag ...
- spring 注解的优点缺点
注解与XML配置的区别 注解:是一种分散式的元数据,与源代码耦合. xml :是一种集中式的元数据,与源代码解耦. 因此注解和XML的选择上可以从两个角度来看:分散还是集中,源代码耦合/解耦. 注解的 ...
- spring注解scheduled实现定时任务
只想说,spring注解scheduled实现定时任务使用真的非常简单. 一.配置spring.xml文件 1.在beans加入xmlns:task="http://www.springfr ...
随机推荐
- Delphi的基于接口(IInterface)的多播监听器模式(观察者模式 )
本文来自:http://www.cnblogs.com/hezihang/p/6083555.html Delphi采用接口方式设计模块,可以降低模块之间的耦合,便于扩展和维护.本文提供一个实现基于接 ...
- 元祖签约K2 BPM,引领绿色健康食品!
漫步街头,我们经常会被一些鲜艳的红色招牌所吸引,走进去会发现这里有一些普通西饼店不会卖的东西,比如红蛋.年糕.粽子.喜饼.等上海传统食品等......这就是元祖食品. 随着人们生活品质的不断提升,元祖 ...
- tiff或tif文件的读取
以下是VC下读取TIFF文件的代码 char* szFileName = "K:\\地图\\fujian-DEM\\fujian1.tif"; TIFF* tiff = TIFFO ...
- 网站如何启用SSL安全证书?IIS7启用新建Https:/
网站使用SSL,通过SSL证书申请,然后导入之后.我们需要对网站进行设置才能正常使用SSL证书,具体如何操作让网站启用SSL呢,本经验以一个网站添加SSL主机头的方式为例来,网站启用SSL服务器安全证 ...
- 【OpenGL】查看显卡对OpenGL的支持程度
由于开发工作中要用到OpenGL的API进行渲染,公司配的电脑又是集成显卡,所以想知道显卡对OpenGL的支持程度. 下面介绍的方法就解决了这一点. 1.下载安装EVEREST Ultimate Ed ...
- 1.1Linux 系统简介(学习过程)
=====课程笔记===== 一.Linux 为何物 Linux 是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS . Linux 也就是系统调用和内核两层,我们使 ...
- Hibernate一级缓存与二级缓存的区别
一级缓存: 就是Session级别的缓存.一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中. 如果短时间内这个session(一定要同一个session)又做了同一个操作,那么h ...
- storm基础框架分析
背景 前期收到的问题: 1.在Topology中我们可以指定spout.bolt的并行度,在提交Topology时Storm如何将spout.bolt自动发布到每个服务器并且控制服务的CPU.磁盘等资 ...
- Boostrap(2)
网页布局 1.网格布局 网格布局就是把网页分为许多小格子,看起来像table,然后在每个小格子中放我们的内容.当然,我们也可以指定一片区域使用网格系统.网格布局主要是应用在移动设备上的,使用方法如下: ...
- 第四十六课:MVC和MVVM的开发区别
实现MVC的目的就是为了让M和V相分离.前端的MVC无法做到View和Model的相分离,而MVVM可以. 我们先来看一个用MVC模式开发的经典例子:(一定要深入了解这种开发的思想,而不是看懂代码) ...