【Spring】Spring,我的零散使用杂记
通过Java类设置配置信息,JavaConfig
Spring常用的通过XML或者@Controller、@Servoce、@Repository、@Component等注解注册Bean,最近看Spring Session的源码,知道还有JavaConfig
注册Bean的方式,就是通过@Configuration
、@Bean
注册Bean。
引用依赖包:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
这个类是配置Bean的:
package com.nicchagil;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UserConfiguration {
@Bean
public UserService userService(UserDAO userDAO) {
return new UserService();
}
@Bean
public UserDAO userDAO() {
return new UserDAO();
}
}
这两个Bean是这样的:
package com.nicchagil;
public class UserDAO {
}
package com.nicchagil;
public class UserService {
}
这个BeanPostProcessor
是用于看Bean有没有实例化的,与JavaConfig
本身没什么关系:
package com.nicchagil;
import java.util.logging.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPostProcessor implements BeanPostProcessor {
Logger logger = Logger.getLogger("MyBeanPostProcessor");
public Object postProcessBeforeInitialization(Object obj, String arg1)
throws BeansException {
return obj;
}
public Object postProcessAfterInitialization(Object obj, String arg1)
throws BeansException {
if (obj != null) {
logger.info("实例化:" + obj + ", Class:" + obj.getClass().getName());
}
return obj;
}
}
记得要注册扫描包的路径:
<?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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- scan the component from the base package -->
<context:component-scan base-package="com.nicchagil" />
<bean id="myBeanPostProcessor" class="com.nicchagil.MyBeanPostProcessor" />
</beans>
测试类:
package com.nicchagil;
import java.util.logging.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HowToUse {
public static Logger LOGGER = Logger.getLogger("HowToUse");
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("spring.xml");
UserDAO userDAO = context.getBean("userDAO", UserDAO.class);
LOGGER.info("userDAO : " + userDAO);
UserService userService = context.getBean("userService", UserService.class);
LOGGER.info("userService : " + userService);
}
}
运行日志:
六月 11, 2017 3:41:57 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@37f8bb67: startup date [Sun Jun 11 15:41:57 CST 2017]; root of context hierarchy
六月 11, 2017 3:41:57 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring.xml]
六月 11, 2017 3:41:58 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1d057a39: defining beans [userConfiguration,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,myBeanPostProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,userService,userDAO]; root of factory hierarchy
六月 11, 2017 3:41:58 下午 com.nicchagil.MyBeanPostProcessor postProcessAfterInitialization
信息: 实例化:com.nicchagil.UserConfiguration$$EnhancerBySpringCGLIB$$cd2ac8bb@32eebfca, Class:com.nicchagil.UserConfiguration$$EnhancerBySpringCGLIB$$cd2ac8bb
六月 11, 2017 3:41:58 下午 com.nicchagil.MyBeanPostProcessor postProcessAfterInitialization
信息: 实例化:com.nicchagil.UserDAO@47db50c5, Class:com.nicchagil.UserDAO
六月 11, 2017 3:41:58 下午 com.nicchagil.MyBeanPostProcessor postProcessAfterInitialization
信息: 实例化:com.nicchagil.UserService@149494d8, Class:com.nicchagil.UserService
六月 11, 2017 3:41:58 下午 com.nicchagil.HowToUse main
信息: userDAO : com.nicchagil.UserDAO@47db50c5
六月 11, 2017 3:41:58 下午 com.nicchagil.HowToUse main
信息: userService : com.nicchagil.UserService@149494d8
自定义逻辑创建Bean的工厂Bean,FactoryBean
引入POM:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.10.RELEASE</version>
</dependency>
声明实体:
package com.nicchagil.factorybeanexercise;
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
定义工厂:
package com.nicchagil.factorybeanexercise;
import org.springframework.beans.factory.FactoryBean;
public class UserFactoryBean implements FactoryBean<User> {
/**
* 获取对象
*/
@Override
public User getObject() throws Exception {
User user = new User();
user.setId(123);
user.setName("Nick Huang");
return user;
}
/**
* 获取对象的类型
*/
@Override
public Class<?> getObjectType() {
return User.class;
}
/**
* 对象是否单例
*/
@Override
public boolean isSingleton() {
return true;
}
}
注册工厂:
<?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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="user" class="com.nicchagil.factorybeanexercise.UserFactoryBean" />
</beans>
测试类:
package com.nicchagil.factorybeanexercise;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HowToTest {
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
User user = ac.getBean("user", User.class);
System.out.println(user);
}
}
【Spring】Spring,我的零散使用杂记的更多相关文章
- spring spring data jpa save操作事务
整合spring spring data jpa的时候,在save方法上加了@Transactional注解.此时调用springdatajpa save方法并不会真的把数据提交给数据库,而是缓存起来 ...
- 基于Spring + Spring MVC + Mybatis + shiro 高性能web构建
一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详 ...
- spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...
- [转]基于Spring + Spring MVC + Mybatis 高性能web构建
http://blog.csdn.net/zoutongyuan/article/details/41379851/ 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.Angula ...
- Spring+Spring MVC+MyBatis
Spring+Spring MVC+MyBatis 目录 一.新建一个基于Maven的Web项目 二.创建数据库与表 三.添加依赖包 四.新建POJO实体层 五.新建MyBatis SQL映射层 六. ...
- MyBatis+Spring+Spring MVC整合开发
MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...
- 基于Spring + Spring MVC + Mybatis 高性能web构建
基于Spring + Spring MVC + Mybatis 高性能web构建 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互 ...
- maven/eclipse搭建ssm(spring+spring mvc+mybatis)
maven/eclipse搭建ssm(spring+spring mvc+mybatis) 前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实 ...
- Spring + Spring MVC + Hibernate
Spring + Spring MVC + Hibernate项目开发集成(注解) Posted on 2015-05-09 11:58 沐浴未来的我和你 阅读(307) 评论(0) 编辑 收藏 在自 ...
随机推荐
- android中的目录结构介绍
Google Android手机的软件为了安全性和稳定性都是默认安装到手机内存里,但是手机内存有限,所以我们会做app2sd操作,来让我们安装的软件放到sd卡上,这个操作是需要rom的支持的. ...
- 致Play Framework开发者们的一封信
2012/04/06 导读:3月中旬,Play Framework 2.0 正式版发布了.2.0 版本的主要新特性:内置对 Java 和 Scala 的支持.完全异步编程模型.侧重于类型安全.强大的 ...
- sql 2005出现错误:数据库 'Twitter' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。
--先备份数据库 --截断事务日志 backup log Twitter with no_loggo --收缩数据库 dbcc shrinkdatabase(Twitter) go O ...
- mysql基本语句集合
一.概述 1.删除字段 alter table {table_name} drop column {column_name}; 2.添加字段 alter table {table_name} Add ...
- C# WinForm给Button或其它控件添加快捷键响应
今天做东西遇到要给按钮添加快捷键.就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...
- block(五)用法
最近又从网上找了点block用法的博客,供大家参考. Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参 ...
- Spark+Hadoop+IDE环境搭建
下载地址:https://download.csdn.net/download/u014028392/8841545
- MySQL存储过程相互调用
什么都不说了上代码: 方式一: 第一个存储过程:test1,参数如下:IN `user_name` VARCHAR(50),OUT `uid` bigint(20) BEGIN #Routine b ...
- Centos7源代码安装freeswitch和启动freeswitch
centos7下安装freeswitch版本:1.6. 1.下载源代码: 进入目录 cd /usr/local/src 克隆原代码 git clone -b v1.6 https://freeswit ...
- Vue(四):实例化第一个Vue应用
实例化语法 var vm = new Vue({ // 选项 }) Vue 构造器中的内容 <!DOCTYPE html> <html> <head> <me ...