spring
文章平均质量分 58
面朝大海春暖花开~
这个作者很懒,什么都没留下…
展开
-
JDK动态代理原理
一、例子先看一个简单的动态代理例子:car接口public interface Car { public String doSomething();}car实现类public class CarImpl implements Car { @Override public String doSomething() { System.out.println("run ... "); return "car"; }}publi原创 2021-04-06 22:23:44 · 85 阅读 · 0 评论 -
@Transactional的10种失效情况
1.错误的访问权限@Servicepublic class UserService { @Autowired private UserMapper userMapper; @Transactional private void add(UserModel userModel) { userMapper.insertUser(userModel); }}因为@Transactional生效要走AOP代理,而切面是切不到私有方法的原创 2021-04-06 22:11:00 · 364 阅读 · 0 评论 -
spring-BeanPostProcessor与BeanFactoryPostProcessor区别
1、BeanFactoryPostProcessor触发时机不一样,BeanFactoryPostProcessor是在BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容;所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建;我们可以通过实现BeanFactoryPostProcessor接口向容器中添加BeanPostProcessor、修改bean的定义信息等操作;或者实现BeanDefinitionRegistryPostProcess原创 2021-03-03 18:26:08 · 300 阅读 · 0 评论 -
spring-容器初始化-refresh()方法(下)
####11、finishBeanFactoryInitialization(beanFactory)原创 2021-03-03 18:21:35 · 131 阅读 · 0 评论 -
spring-容器初始化-refresh()方法(上)
1原创 2021-02-25 16:30:52 · 296 阅读 · 2 评论 -
spring-aop原理
一、先从一个简单的aop例子说起1、定义一个切面,切入点为MathCalculator类里的所有方法@Aspectpublic class LogAspects { //抽取公共的切入点表达式 @Pointcut("execution(public int com.aop.MathCalculator.*(..))") public void pointCut(){}; //@Before在目标方法之前切入 @Before("pointCut()") public void log原创 2021-01-22 14:57:33 · 220 阅读 · 0 评论 -
spring-bean的4中初始化方式
4种方式原创 2021-01-22 14:16:19 · 103 阅读 · 0 评论 -
spring-@Autowired、@Qualifier、@Primary、@Resource使用
1、@Autowired自动注入:、默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);找到就赋值如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext.getBean(“bookDao”)@Qualifier(“bookDao”):使用@Qualifier指定需要装配的组件的id,而不是使用属性名自动装配默认一定要将属性赋值好,没有就会报错;可以使用@Autowired(r原创 2021-01-20 14:57:41 · 596 阅读 · 0 评论 -
spring-@value属性赋值
1、@value给属性赋值,使用方式有三种:基本数值SpEL; #{}写${};取出配置文件【properties】中的值(在运行环境变量里面的值)使用如下: @Value("张三") private String name; @Value("#{20-2}") private Integer age; @Value("${person.nickName}") private String nickName;其中第三种需要增加外部配置文件,需要使用@PropertySource原创 2021-01-20 10:55:02 · 546 阅读 · 0 评论 -
spring-@Conditional条件注解
1、@Conditional条件注解;满足当前条件,这个类中配置的所有bean注册才能生效;使用如下:@Conditional({MyCondition.class})public class TestCondition {}//只有dev环境时 才会加载public class MyCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedT原创 2021-01-19 19:07:50 · 201 阅读 · 0 评论 -
spring-scope作用域
1、@Scope调整作用域,默认为单实例:prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。每次获取的时候才会调用方法创建对象;singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。以后每次获取就是直接从容器(map.get())中拿request:同一次请求创建一个实例session:同一个session创建一个实例使用如下: @Scope("prototype") @Bean("person") public P原创 2021-01-19 18:52:45 · 124 阅读 · 0 评论 -
spring-bean注册
1、@Controller、@Service、@Repository、@Component向容器中注册自己写的类;原理是每个注解都对应一个BeanPostProcessor,在容器启动时会扫描这些BeanPostProcessor,将这些注解标柱的类注册到容器中,后续会说到。2、@Bean注册第三方包里面的组件到容器中;类型为返回值的类型,id默认是用方法名作为id,使用如下: //给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id @Bean("person")原创 2021-01-19 18:08:10 · 107 阅读 · 0 评论 -
spring-包扫描的三种方式
1、@Configuration会告诉spring这是一个配置类,与springmvc中的bean.xml是一个效果;使用如下:@Configurationpublic class MainConfig {}2、@ComponentScan告诉spring要扫描的类路径,与springmvc中的<context:component-scan>一个效果;lazyInit制定是否需要懒加载,默认false,懒加载表示程序第一次访问时才加载,否则在容器初始化时加载,excludeFilt原创 2021-01-19 17:49:14 · 750 阅读 · 0 评论