bean

2019.6.30 Spring注解 bean后置处理器和属性赋值

断了今生、忘了曾经 提交于 2020-03-05 10:00:45
6.30 BeanPostProcessor是一个接口,用于在bean初始化之前和之后调用。(在bean属性赋值之后) 需要实现其中的2个方法 @Component public class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println(beanName+"执行之前!"); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println(beanName+"执行之后!"); return bean; } } 属性赋值 xml文件中可以指定value属性,可以是基本类型的值,可以是springEL表达式(#{}),还可以是配置文件的K/V(${})[需要事先引入context标签库和 <context:property-placeholder

Spring-02

懵懂的女人 提交于 2020-03-05 08:10:27
1 Bean 的 init-method 和 destroy-method 以前在学Servlet的时候,有 init 和 destory 、service 等方法 , 用 Spring 管理的 bean 也可以有类似的机制 对于单实例的 Bean ,在创建的时候会调用 initMethodA() 方法,在销毁的时候,会调用 destroyMethodA() 【方法名自定义】 <bean name="userAction_name" class="com.neusoft.action.UserAction" init-method="initMethodA" destroy-method="destroyMethodA" /> public class UserAction { public void initMethodA(){ System.out.println("initMethodA调用了,这是在初始的时候调用的"); } public void destroyMethodA(){ System.out.println("destroyMethodA调用了,这是在销毁的时候调用的"); } } public static void main(String[] args) { ClassPathXmlApplicationContext ctx=new

spring框架总结(04)----介绍的是Spring中的JDBC模板

别来无恙 提交于 2020-03-05 08:03:49
1.1 Jdbc模板概述 它是spring框架中提供的一个对象, 是对原始 Jdbc API 对象的简单封装 。spring框架为我们提供了很多的操作模板类,入下图所示: 我们今天的主角在 spring-jdbc-4.24.RELEASE.jar 中,我们在导包的时候,除了要导入这个jar包外,还需要导入一个 spring-tx-4.2.4.RELEASE.jar (它是和事务相关的)。 1、Spring中的jdbc模板入门 1.1.1. 创建工程、引入jar包 1.1.2. 创建测试表 CREATE TABLE account( id BIGINT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(40), money DOUBLE )CHARACTER SET utf8 COLLATE utf8_general_ci; 1.1.3. 创建测试类 注意:需要导入c3p0的jar包 public class TestJdbcTemplate { @Test public void test1(){ //创建 jdbc 模板对象 JdbcTemplate jdbcTemplate = new JdbcTemplate(); //创建c3p0数据源 ComboPooledDataSource dataSource = new

struts2-2.3.4.1的struts-default.xml源码

陌路散爱 提交于 2020-03-05 03:31:42
<?xml version="1.0" encoding="UTF-8" ?> <!-- /* * $Id: struts-default.xml 1326928 2012-04-17 05:03:45Z lukaszlenart $ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required

mybatis expected at least 1 bean which qualifies as autowire candidate for this dependency

你说的曾经没有我的故事 提交于 2020-03-05 00:35:28
错误原因:没有引入相应mapper接口,导致spring没有找到依赖 解决方法一:使用注解的方法: 首先在spring配置文件中添加 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.forum" /> <property name="annotationClass" value="org.springframework.stereotype.Repository" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> 然后在mapper接口中添加注解 @Transactional @Repository public interface RoleMapper 解决方法二:使用xml配置 定义mapper的bean <!— mapper bean --> <bean id="roleMapper" class="org.mybatis.spring.MapperFactoryBean"> <property name="mapperInterface" value="com.forum.dao.RoleMapper

spring学习3-Ioc和DI的简单介绍

孤街醉人 提交于 2020-03-04 22:21:27
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的 面向对象编程 的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称 DI 。 以上是来自于百度百科中关于IOC和DI的简单介绍,从中我们可以看到ioc的主要作用是减少类与类之间的耦合程度,在spring中,ioc的表现为类的实例化由原本程序员自己创建对象的动作转为由spring容器创建对象。 在不使用IOC的情况下,我们实例化一个类 IEngine engine = new QiyouEngine(); 在这个语句中我们用到了IEngine接口和其实现类QiyouEngine,这样这个类就需要引用这两个类,如果需要改动实现类,则需要修改代码,这就违反了面向对象设计中的”开闭原则“。想要解耦这段代码,一般的解决可以使用工厂模式对其解耦 1 public class Main{ 2 public static void main(String args[]){ 3 IEngine engine = EngineFactory.getEngine(); 4 engine.doSomething(); 5 } 6 } 7 8 9 public class EngineFactory{ 10 public

Springboot + RabbitMQ实现消息延迟重试

*爱你&永不变心* 提交于 2020-03-04 18:39:14
一:简介 使用场景:调用第三方接口时如果调用失败需要隔几秒再去尝试下一次调用,直到调用N次还失败就停止调用。最常用的场景就是支付成功异步通知第三方支付成功。 1. 为什么要调用多次? 如果调用1次就成功了就停止调用,如果失败可能由于网络原因没有请求到服务器需要再次尝试,第二次很可能就会调用成功了。 2. 为什么要间隔几秒再尝试下次调用? 如果是因为网络原因没有请求到服务器如果再立刻调用,很可能此时网络还是没有好,可能等几秒后网络就恢复了,此时再去调用就好了。 实现效果类似于支付宝中的回调延迟重试: 二:代码示例 功能示例:每隔2秒、4秒、8秒、16秒去重试调用接口,总共调用4次。 pom.xml < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-amqp </ artifactId > </ dependency > < dependency > < groupId > org.apache.httpcomponents </ groupId > < artifactId > httpclient </ artifactId > < version > 4.5.6 </ version > </ dependency > <

seata at模式工作原理

久未见 提交于 2020-03-04 18:09:07
前一阵子大概的看了一下seata分布式事务at模式的工作原理,那么现在就来记录一下它的工作方式。 这个项目调试起来还是挺麻烦的,因为你首先需要启动注册中心和seata管理服务,并且需要三个客户端来模拟分布式事务的进行,项目结构如下(盗图一张) tc:seata提供的事务管理中心。 tm:事务的发起者,并且最终与tc通信告诉事务的成功与否 rm:单个的微服务,也就是最终的资源管理者 实际上这张图不是很恰当,一般的业务流程中并不会有一个单独的business tm出现,实际上比较贴合的流程应该是在创建order的时候,会同时发起事务,并且最终会通过其它服务的返回信息,来决定提交来回滚,所以order服务应该即是tm又是rm,但是我又不会画图,那就这么着吧。 使用at模式,我们除了配置seata相关参数,数据源代理之外。只需要在需要进行事务控制的方法上加上@GlobalTranscation注解就可以了,那么看一下这个注解的代理方法,对于它的处理,在GlobalTransactionScanner这里做了处理,我们来重点看一下这个类。 首先看一下它的继承关系, public class GlobalTransactionScanner extends AbstractAutoProxyCreator implements InitializingBean,

深度解析互联网大厂面试难题自定义@EnableXX系列

偶尔善良 提交于 2020-03-04 13:11:12
深度解析互联网大厂面试难题自定义@EnableXX系列 其实是一个@Import的设计技巧 创建注解@EnableXX(任何名称注解都行,只是这个名字好一些) XXConfiguration类不能使用@Component,不然Bean就立即注册了,达不到开关的目的 使用@EnableXX注解的时候,一定是与@Component或者@Configuration进行复合使用,否则开关本身无效,换句话说就是让别的@Component或者@Configuration把自己的@Bean带进去。 实体类 package com.example.demo14.entity; public class Stu { String name; public Stu(String name) { this.name = name; } public Stu() { } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Stu{" + "name='" + name + '\'' + '}'; } } 配置类 package com.example.demo14

@Configuration+@ConfigurationProperties+@EnableCo

≡放荡痞女 提交于 2020-03-04 11:47:59
@Configuration+@ConfigurationProperties+@EnableConfigurationProperties 最佳设计方案(现在又改板了): Bean上面直接设置@ConfigurationProperties //需要依赖spring-boot-configuration-processor @ConfigurationProperties(prefix = "stu") public class Stu { String name; public Stu(String name) { this.name = name; } public Stu() { } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Stu{" + "name='" + name + '\'' + '}'; } } 方式一:configuration上面跟随@EnableConfigurationProperties【这种情况只有configuration里面一个Bean 】 @Configuration