Java方式配置Spring
概述
本文主要讲的是如何使用Java Bean来配置Spring,而不是用xml来配置Spring。
本文主要是代码,需要注意的都在注释里面。
Java配置Spring
package com.wisely.highlight_spring4.ch1.javaconfig; /**
* 最终被调用的类
*/
public class FunctionService {
public String sayHello(String word){
return "Hello " + word +" !";
}
}
package com.wisely.highlight_spring4.ch1.javaconfig; /**
* 调用类
*/
public class UseFunctionService {
//这里也可以使用@Autowired将FunctionService的实体bean注入到UseFunctionService中,
//让UseFunctionService具备将FunctionService的实体bean注入到UseFunctionService中的功能
//@Autowired
FunctionService functionService; public void setFunctionService(FunctionService functionService) {
this.functionService = functionService;
} public String SayHello(String word){
return functionService.sayHello(word);
}
}
package com.wisely.highlight_spring4.ch1.javaconfig; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* 配置类,代替xml配置
*/
//声明当前类是一个配置类
@Configuration
//自动扫描包名下所有使用@Service/@Component/@Repository和@Controller的类,并注册为Bean
//@ComponentScan("com.wisely.highlight_spring4.ch1")
public class JavaConfig {
/**
* 声明当前方法的返回值是一个bean,bean的名称是方法名
* @return bean
*/
@Bean
public FunctionService functionService(){
return new FunctionService();
} @Bean
public UseFunctionService useFunctionService(){
UseFunctionService useFunctionService = new UseFunctionService();
//注入FunctionService的时候直接调用functionService
useFunctionService.setFunctionService(functionService()); //
return useFunctionService; }
/**
* 也可以将bean作为方法参数传入,spring会自动注入
*/
// @Bean
// public UseFunctionService useFunctionService(FunctionService functionService){//4
// UseFunctionService useFunctionService = new UseFunctionService();
// useFunctionService.setFunctionService(functionService);
// return useFunctionService;
// }
}
package com.wisely.highlight_spring4.ch1.javaconfig; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**
* 程序入口
*/
public class Main {
public static void main(String[] args) {
//使用AnnotationConfigApplicationContext作为容器,
//接受输入一个配置类作为参数
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(JavaConfig.class);
//获得声明配置的UseFunctionService的Bean
UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
//调用输出方法
System.out.println(useFunctionService.SayHello("java config"));
context.close();
}
}
最终效果如下所示

Java配置AOP
package com.wisely.highlight_spring4.ch1.aop; import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
* 拦截规则的注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Action {
//注解参数
String name();
}
package com.wisely.highlight_spring4.ch1.aop; import org.springframework.stereotype.Service; /**
* 使用注解的被拦截类
*/
@Service
public class DemoAnnotationService {
@Action(name="注解式拦截的add操作")
public void add(){}
}
package com.wisely.highlight_spring4.ch1.aop; import org.springframework.stereotype.Service; /**
* 使用方法规则被拦截类
*/
@Service
public class DemoMethodService {
public void add(){}
}
package com.wisely.highlight_spring4.ch1.aop; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component; import java.lang.reflect.Method; /**
* 配置切面
*/
@Aspect //声明切面
@Component //让切面成为spring容器管理的bean
public class LogAspect {
//声明切点,拦截Action
@Pointcut("@annotation(com.wisely.highlight_spring4.ch1.aop.Action)")
public void annotationPointCut() {
} //声明建言,并使用@Pointcut定义的切点annotationPointCut()
@After("annotationPointCut()")
public void after(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Action action = method.getAnnotation(Action.class);
//通过反射获可得注解上的name属性,然后做日志记录相关的操作
System.out.println("注解式拦截 " + action.name());
} //声明建言,直接使用拦截规则作为参数
@Before("execution(* com.wisely.highlight_spring4.ch1.aop.DemoMethodService.*(..))")
public void before(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
System.out.println("方法规则式拦截," + method.getName());
}
}
package com.wisely.highlight_spring4.ch1.aop; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy; /**
* Spring配置类,因为程序中使用了诸如@Service之类的配置,所以这里不用写其他配置
* 只需要使用@ComponentScan扫描一下就可以了
*/
@Configuration
//扫描注解,注册bean
@ComponentScan("com.wisely.highlight_spring4.ch1.aop")
//开启spring对AspectJ的支持
@EnableAspectJAutoProxy //
public class AopConfig { }
package com.wisely.highlight_spring4.ch1.aop; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**
* 程序入口
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(AopConfig.class);
DemoAnnotationService demoAnnotationService = context.getBean(DemoAnnotationService.class);
DemoMethodService demoMethodService = context.getBean(DemoMethodService.class);
demoAnnotationService.add();
demoMethodService.add();
context.close();
}
}
最终效果如下所示

Java方式配置Spring的更多相关文章
- Java方式配置Spring MVC
概述 使用Java方式配置Spring MVC,以及回顾一下Spring MVC的各种用法. Spring MVC简述 关于Spring MVC的介绍网上有很多,这里就不再赘述了,只是要说一下,Spr ...
- 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...
- bean的自动装配,使用注解开发,使用java的方式配置Spring
bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...
- SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP
AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...
- 纯java config配置Spring MVC实例
1.首先创建一个Maven工程,项目结构如下: pom.xml添加Spring和servlet依赖,配置如下 <project xmlns="http://maven.apache.o ...
- 使用java类的方式配置spring 需要什么注解?
1.@Configuration 修饰类,声明当前类是一个配置类,相当于applicationContext.xml文件 2.@ComponentScan 用于指定spring在初始化容器时要扫描的包 ...
- spring java 方式配置JedisPool Bean
来自一个开源项目https://git.oschina.net/geek_qi/ace-cache package com.ace.cache.config; import com.ace.cache ...
- MyBatis 及 MyBatis Plus 纯注解方式配置(Spring Boot + Postgresql)
说明 当前的版本为 MyBatis 3.5.9 MyBatis Plus 3.5.1 Spring Boot 2.6.4 Postgresql 42.3.3 与 Spring Boot 结合使用 My ...
- 纯注解方式配置spring+springMVC
1.新建类initConfig,继承AbstractAnnotationConfigDispatcherServletInitializer,并重写getRootConfigClasses().get ...
随机推荐
- 【转载】rageagainstthecage.c源码以及注释
如下: //头文件包含 #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #inclu ...
- PHP多种序列化/反序列化的方法 json_encode json_decode
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...
- Winform中ComBox大小设置
combox,listview等一些控件的外观会由于字体大小的改变而改变.修改字体的大小宽度自动变化
- 同步数据库bat脚本
在开发中, 如果需要将测试数据库同步到本地进行本地的测试, 可以执行一下脚本进行同步 @ECHO off TITLE databaseBackup REM : 该脚本会将 191 的 database ...
- ElasticSearch基础之映射mapping
[01]什么是mapping? 首先去看看官方文档,非常重要:https://www.elastic.co/guide/en/elasticsearch/reference/current/mappi ...
- Uploadify API在项目上的应用
在项目开发中,前端使用easyui,jq的时候,我么涉及到导入的时候都要用到这个上传插件,用法是: 1:先初始化上传控件 2:打开导入的easyui dialog弹出框,dialog里面将上传的inp ...
- 模板 - n个数的乘法逆元
这道题里面不用保存 inva[i] ,而且还卡常.事实证明快读快到飞起, #include<bits/stdc++.h> using namespace std; typedef long ...
- c#二维数组传递与拷贝
定义 string[,] arr = new string[12, 31] 另一种string[][] ary = new string[5][];相当于一维数组 常量二维数组定义, 用readonl ...
- OPENGL3_基本图元
类型 说明 GL_POINTS 单个顶点集 GL_LINES 多组双顶点线段 GL_POLYGON 单个简单填充凸多边形 GL_TRAINGLES 多组独立填充三角形 GL_QUADS 多组独立填充四 ...
- 3d工具收集
Poser 是Metacreations公司推出的一款三维动物.人体造型和三维人体动画制作的极品软件.用过Poser 2与Poser 3的朋友一定能感受到Poser的人体设计和动画制作是那么的轻松自如 ...