spring注解
来源:互联网 发布:php程序员是什么意思 编辑:程序博客网 时间:2024/06/07 15:07
Spring框架的IOC之注解方式的快速入门
步骤一:导入注解开发所有需要的jar包
- 引入IOC容器必须的6个jar包
- 多引入一个:Spring框架的AOP的jar包,spring-aop的jar包
步骤二:创建对应的包结构,编写Java的类
- UserService – 接口
- UserServiceImpl – 具体的实现类
步骤三:在src的目录下,创建applicationContext.xml的配置文件,然后引入约束。注意:因为现在想使用注解的方式,那么引入的约束发生了变化
- 需要引入context的约束,具体的约束如下
<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 definitions here --> </beans>
步骤四:在applicationContext.xml配置文件中开启组件扫描
Spring的注解开发:组件扫描
注意:可以采用如下配置
这样是扫描com.itheima包下所有的内容
步骤五:在UserServiceImpl的实现类上添加注解
- @Component(value=”userService”) – 相当于在XML的配置方式中
步骤六:编写测试代码
public class SpringDemo1 {
@Test
public void run1(){
ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”);
UserService us = (UserService) ac.getBean(“userService”);
us.save();
}
}
@Component:组件.(作用在类上)
Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的)
- @Controller – 作用在WEB层
- @Service – 作用在业务层
@Repository – 作用在持久层
说明:这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强
属性注入的注解(说明:使用注解注入的方式,可以不用提供set方法)
如果是注入的普通类型,可以使用value注解
- @Value – 用于注入普通类型
如果注入的是对象类型,使用如下注解
- @Autowired – 默认按类型进行自动装配
- 如果想按名称注入
- @Qualifier – 强制使用名称注入
- @Autowired – 默认按类型进行自动装配
@Resource – 相当于@Autowired和@Qualifier一起使用
- 强调:Java提供的注解
- 属性使用name属性
1.项目样式
2.配置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"> <!-- bean definitions here --> <!-- 开启注解的扫描 --> <context:component-scan base-package="com.demo01"/></beans>
3.写java方法
package com.demo01.dao;import java.util.logging.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Repository;import com.demo01.server.UserServerDao;//spring注解,这样就不要在文件里面配置了/** * 其实Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的) * * @Controller -- 作用在WEB层 * @Service -- 作用在业务层 * @Repository -- 作用在持久层 * @author lenovo * */@Repository(value="userServiceImpl")public class UserDaoImpl implements UserDao { //用于注入普通类型 @Value(value = "aaaa") String name; //默认按类型进行自动装配 @Autowired public UserServerDao userServerDao; private Logger log = Logger.getLogger("log"); @Override public void addName() { // TODO Auto-generated method stub log.info("添加了一个名字"); log.info(name); } @Override public void addYeat() { // TODO Auto-generated method stub log.info("添加一个年"); userServerDao.addServer(); }}
package com.demo01.server;import org.springframework.stereotype.Service;@Service(value="userServerImpl")public class UserServerImpl implements UserServerDao{ @Override public void addServer() { // TODO Auto-generated method stub System.out.println("使用一个servere使用"); }}
Bean的作用范围和生命周期的注解
Bean的作用范围注解
- 注解为@Scope(value=”prototype”),作用在类上。值如下:
- singleton – 单例,默认值
- prototype – 多例
- 注解为@Scope(value=”prototype”),作用在类上。值如下:
Bean的生命周期的配置(了解)
- 注解如下:
- @PostConstruct – 相当于init-method
- @PreDestroy – 相当于destroy-method
- 注解如下:
3.demo样式
package com.demo01.server;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Service;@Service(value="userServerImpl")@Scope(value = "singleton")public class UserServerImpl implements UserServerDao{ @PostConstruct private void init() { // TODO Auto-generated method stub System.out.println("开始了。。。"); } @PreDestroy public void destroy(){ System.out.println("结束了。。。。。。。"); } @Override public void addServer() { // TODO Auto-generated method stub System.out.println("使用一个servere使用"); }}
spring注解test注解
1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试
2. 具体步骤
* 要求:必须先有JUnit的环境(即已经导入了JUnit4的开发环境)!!
* 步骤一:在程序中引入:spring-test.jar* 步骤二:在具体的测试类上添加注解
@RunWith(SpringJUnit4ClassRunner.class) //其实和在web.xml中接入spring的很像 @ContextConfiguration("classpath:applicationContext.xml") public class SpringDemo1 { //这个是java中的注解,和spring的注解最大的区别是,他是'name' @Resource(name="userService") private UserService userService; @Test public void demo2(){ userService.save(); } }
spring AOP 注入
使用 xml 配置方式
技术分析之AOP的相关术语
- Joinpoint(连接点) – 所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
- Pointcut(切入点) – 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义
- Advice(通知/增强) – 所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
- Introduction(引介) – 引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field
- Target(目标对象) – 代理的目标对象
- Weaving(织入) – 是指把增强应用到目标对象来创建新的代理对象的过程
- Proxy(代理) – 一个类被AOP织入增强后,就产生一个结果代理类
- Aspect(切面) – 是切入点和通知的结合,以后咱们自己来编写和配置的
技术分析之AspectJ的XML方式完成AOP的开发
步骤一:创建JavaWEB项目,引入具体的开发的jar包
- 先引入Spring框架开发的基本开发包
再引入Spring框架的AOP的开发包
spring的传统AOP的开发的包
- spring-aop-4.2.4.RELEASE.jar
- com.springsource.org.aopalliance-1.0.0.jar
aspectJ的开发包
- com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
- spring-aspects-4.2.4.RELEASE.jar
- 步骤二:创建Spring的配置文件,引入具体的AOP的schema约束
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
- 步骤三:创建包结构,编写具体的接口和实现类
- com.itheima.demo2
- CustomerDao – 接口
- CustomerDaoImpl – 实现类
- com.itheima.demo2
步骤四:将目标类配置到Spring中
步骤五:定义切面类
public class MyAspectXml { // 定义通知 public void log(){ System.out.println("记录日志..."); } }
步骤六:在配置文件中定义切面类
步骤七:在配置文件中完成aop的配置
<aop:config> <!-- 引入切面类 --> <aop:aspect ref="myAspectXml"> <!-- 定义通知类型:切面类的方法和切入点的表达式 --> <aop:before method="log" pointcut="execution(public * com.itheima.demo3.CustomerDaoImpl.save(..))"/> </aop:aspect> </aop:config>
- 完成测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class Demo3 { @Resource(name="customerDao") private CustomerDao customerDao; @Test public void run1(){ customerDao.save(); customerDao.update(); customerDao.delete(); } }
使用注解的方法
技术分析之:Spring框架的AOP技术(注解方式)
步骤一:创建JavaWEB项目,引入具体的开发的jar包
- 先引入Spring框架开发的基本开发包
再引入Spring框架的AOP的开发包
spring的传统AOP的开发的包
- spring-aop-4.2.4.RELEASE.jar
- com.springsource.org.aopalliance-1.0.0.jar
aspectJ的开发包
- com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
- spring-aspects-4.2.4.RELEASE.jar
步骤二:创建Spring的配置文件,引入具体的AOP的schema约束
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> </beans>
步骤三:创建包结构,编写具体的接口和实现类
- com.itheima.demo1
- CustomerDao – 接口
- CustomerDaoImpl – 实现类
- com.itheima.demo1
步骤四:将目标类配置到Spring中
<bean id="customerDao" class="com.itheima.demo1.CustomerDaoImpl"/>
步骤五:定义切面类
添加切面和通知的注解
@Aspect – 定义切面类的注解
通知类型(注解的参数是切入点的表达式)
- @Before – 前置通知
- @AfterReturing – 后置通知
- @Around – 环绕通知
- @After – 最终通知
- @AfterThrowing – 异常抛出通知
具体的代码如下
@Aspect public class MyAspectAnno { @Before(value="execution(public void com.itheima.demo1.CustomerDaoImpl.save())") public void log(){ System.out.println("记录日志..."); } }
- 步骤六:在配置文件中定义切面类
<bean id="myAspectAnno" class="com.itheima.demo1.MyAspectAnno"/>
- 步骤七:在配置文件中开启自动代理
<aop:aspectj-autoproxy/>
- 完成测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class Demo1 { @Resource(name="customerDao") private CustomerDao customerDao; @Test public void run1(){ customerDao.save(); customerDao.update(); } }
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.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 开启自动代理 aop代理扫描--> <aop:aspectj-autoproxy/> <!-- 开启注解的扫描 --> <context:component-scan base-package="com"/> <!-- 这个不能删除,不然,aop没法扫描到这个切面 --> <bean id="logUser" class="com.aop.demo2.log.LogUser"/></beans>
3.切面的配置
package com.aop.demo2.log;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;@Aspectpublic class LogUser { @Before(value = "LogUser.fn()") public void log(){ System.out.println("我要打印"); } /** * 自动定义切入点 @Pointcut */ @Pointcut(value="execution(public * com.aop.demo2.dao.AopUserImpl.select())") public void fn(){}}
1.项目中,demo2 是注解的方法
2.demo的地址https://gitee.com/yuhaifei/java-all-demo/tree/master/spring_demo
3.src/.. 文件夹下面有黑马老师的笔记非常感谢
- spring注解--组合注解
- Spring注解
- Spring注解
- Spring注解
- Spring注解
- Spring注解
- Spring 注解
- Spring注解
- Spring注解
- Spring注解
- spring 注解
- spring 注解
- spring注解
- Spring 注解
- Spring 注解
- spring 注解
- spring 注解
- spring 注解
- poj1094 Sorting It All Out
- js中for循环的作用域;函数调用的理解;数组对象的理解;
- 输出乘法顺序表
- 求C_18^13的值
- hdu 6006 Engineer Assignment(状压DP)
- spring注解
- docker本机启动多台容器导致出现后续容器启动失败
- 留言板功能
- python 修饰器
- 没有对象的指针是野指针【用C语言做生日贺卡】
- 智能指针
- 图像处理之使用人机交互截取图片
- SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]
- 树上 分块 莫队 题型小结 加 题集