Spring的学习和源码的学习
PS:Spring中有各种的Templeate,比如jdncTemplate,主要是为了避免各种模板的代码,抽象出来的
PS:
PS: @Configration、@Bean是用来替代xml那种解析方式
----------------------------------------------------------------------------------------------------------
PS: ApplicatonContext加载所有的bean,加载原则的get/set
PS:Spring管理下 bean的声明周期
PS:Spring4 的模块
PS: 建议使用自动装配的机制
PS: @Component 会默认以类名第一个字母小写作为id名字, 表明该类会作为组件类
PS: @ComponentScan会默认扫描该类子包所有Component的bean
- @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
)
- PS: @Componet只适合单独bean的状态,无依赖,如果说是bean和bean之间有依赖的话,还是要用Autowired(也就是Bean中Bean)
@Autowried 和 @inject可以互换
PS: 传统装配的类型
- PS: 有些第三方的类无法装配bean,就只能使用java代码装配了。也就是之前的并不可能解决所有的问题。
PS: 并不是所有的场景都可以自动的装配的,这时候就得使用 xml配置或者 Java(JavaConfig是替代Java更好的解决方案)配置了
1.创建配置类 @Configration(如果ComponentScan去掉就不报错,还必须使用@Bean把对象注入进去)
2.声明bean @Bean
3.借助JavaConfig实现注入
- package soundsystem;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- @Configuration
- public class CDPlayerConfig {
- @Bean
- public CompactDisc compactDisc() {
- return new SgtPeppers();
- }
- @Bean
- public CDPlayer cdPlayer(CompactDisc compactDisc) {
- return new CDPlayer(compactDisc);
- }
- }
通过xml装配bean
PS: 根据环境的变化,修改配置文件
- package com.myapp;
- import javax.sql.DataSource;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.Profile;
- import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
- import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
- import org.springframework.jndi.JndiObjectFactoryBean;
- @Configuration
- public class DataSourceConfig {
- @Bean(destroyMethod = "shutdown")
- @Profile("dev")
- public DataSource embeddedDataSource() {
- return new EmbeddedDatabaseBuilder()
- .setType(EmbeddedDatabaseType.H2)
- .addScript("classpath:schema.sql")
- .addScript("classpath:test-data.sql")
- .build();
- }
- @Bean
- @Profile("prod")
- public DataSource jndiDataSource() {
- JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
- jndiObjectFactoryBean.setJndiName("jdbc/myDS");
- jndiObjectFactoryBean.setResourceRef(true);
- jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
- return (DataSource) jndiObjectFactoryBean.getObject();
- }
- }
- <?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:jdbc="http://www.springframework.org/schema/jdbc"
- xmlns:jee="http://www.springframework.org/schema/jee" xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="
- http://www.springframework.org/schema/jee
- http://www.springframework.org/schema/jee/spring-jee.xsd
- http://www.springframework.org/schema/jdbc
- http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
- <beans profile="dev">
- <jdbc:embedded-database id="dataSource" type="H2">
- <jdbc:script location="classpath:schema.sql" />
- <jdbc:script location="classpath:test-data.sql" />
- </jdbc:embedded-database>
- </beans>
- <beans profile="prod">
- <jee:jndi-lookup id="dataSource"
- lazy-init="true"
- jndi-name="jdbc/myDatabase"
- resource-ref="true"
- proxy-interface="javax.sql.DataSource" />
- </beans>
- </beans>
--------------------------在Autowired的时候会存在歧义
PS: prototype就是多例
@Scope
----------运行时注入,读取配置文件
@ProtertySource
---------------------------------------------------------------------------
例子是抄电表
Spring AOP详解
PS: 重点!!!!!!!!!!!! 这五种方式说明何时调用通知
PS: 这两个是一样的
PS: home 视图解析, home将会被解析为/WEB-INF/views/home.jsp
PS:春河说的校验表单参数
- package spittr;
- import javax.validation.constraints.NotNull;
- import javax.validation.constraints.Size;
- import org.apache.commons.lang3.builder.EqualsBuilder;
- import org.apache.commons.lang3.builder.HashCodeBuilder;
- import org.hibernate.validator.constraints.Email;
- public class Spitter {
- private Long id;
- @NotNull
- @Size(min=5, max=16)
- private String username;
- @NotNull
- @Size(min=5, max=25)
- private String password;
- @NotNull
- @Size(min=2, max=30)
- private String firstName;
- @NotNull
- @Size(min=2, max=30)
- private String lastName;
- @NotNull
- private String email;
- public Spitter() {}
- public Spitter(String username, String password, String firstName, String lastName, String email) {
- this(null, username, password, firstName, lastName, email);
- }
- public Spitter(Long id, String username, String password, String firstName, String lastName, String email) {
- this.id = id;
- this.username = username;
- this.password = password;
- this.firstName = firstName;
- this.lastName = lastName;
- this.email = email;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getFirstName() {
- return firstName;
- }
- public void setFirstName(String firstName) {
- this.firstName = firstName;
- }
- public String getLastName() {
- return lastName;
- }
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- @Override
- public boolean equals(Object that) {
- return EqualsBuilder.reflectionEquals(this, that, "firstName", "lastName", "username", "password", "email");
- }
- @Override
- public int hashCode() {
- return HashCodeBuilder.reflectionHashCode(this, "firstName", "lastName", "username", "password", "email");
- }
- }
PS: 看公司代码
- PS:自定义异常处理
通常是使用
@ControllerAdvice
PS: 这个就是 执行的顺序, 有点类似Activity
PS: 使用spring 的拦截器,只用一个就行 了。
PS: 可以在测试 和 调试阶段添加 验证账户
----------------------------------------Spring源码学习
PS:学习的代码是spring 3.2
PS:阅读源码最好的办法就是跟着 事例 操作一遍
PS: XMLBeanFactory继承自 1, 而 1 是整个bean加载的核心部分;
-------------------------------------------------------------------------------------------------------------------------------
PS: SpringMVC是基于Servlet功能实现的
Spring的学习和源码的学习的更多相关文章
- Dapper源码学习和源码修改
之前ORM比较火热,自己也搞了个WangSql,但是感觉比较low,大家都说Dapper性能好,所以现在学习学习Dapper,下面简单从宏观层面讲讲我学习的Dapper. 再了解一个东西前,先得学会使 ...
- Dapper源码学习和源码修改(下篇)
目录: Dapper源码学习和源码修改(上篇主要讲解入参解析) Dapper源码学习和源码修改(下篇主要讲解出参解析) 继上篇讲了下自己学习Dapper的心得之后,下篇也随之而来,上篇主要讲的入参解析 ...
- Unsafe 学习和源码阅读
在代码中获取 Unsafe 对象的方法: // 在 AtomicInteger 里面是这么用的private static final Unsafe unsafe = Unsafe.getUnsafe ...
- Java源码详解系列(十一)--Spring的使用和源码
Spring 是一个一站式的 Java 框架,致力于提高我们项目开发的效率.通过 Spring,我们可以避免编写大量额外代码,更专注于我们的核心逻辑.目前,Spring 已经成为最受欢迎的 Java ...
- ssh repo ----> struts+hibernate+spring( jar包和源码)各版本下载链接
struts http://archive.apache.org/dist/struts/ hibernate http://hibernate.org/orm/releases/5.0/ sprin ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
- spring源码学习(三)--spring循环引用源码学习
在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...
- 曹工说Spring Boot源码(26)-- 学习字节码也太难了,实在不能忍受了,写了个小小的字节码执行引擎
曹工说Spring Boot源码(26)-- 学习字节码也太难了,实在不能忍受了,写了个小小的字节码执行引擎 写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean De ...
- Spring源码解析02:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析
一. 前言 Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别.本篇就以BeanFactory基 ...
随机推荐
- Docker镜像Push到DockerHub
1.自己整理的容器首先通过commit做成本地镜像 docker commit -a "Cristin" -m "测试开发平台Jenkins" 281eef85 ...
- Webpack + vue 搭建
前言: 为何使用webpack? 为何相对于gulp&grunt更有优势 WebPack(前往官网)可以看做是模块打包机:直接分析项目结构,找到JavaScript模块以及其它的一些浏览器不能 ...
- dump总结
•http://blog.csdn.net/lkforce/article/details/60878295 •日志文件生成 •方法1 •jmap -dump:format=b,file=201703 ...
- R语言-默认镜像设置
问题1:如何设置默认镜像 你希望下载某些R包,因此希望设定默认的CRAN网站镜像,这样R每次下载时不需要你选择镜像. 解决方案 该方案要求用户R系统中包含一个.Rprofile文件,如方法3.16描述 ...
- TeXstudio+TexLive交叉引用
LaTeX 交叉引用系统简介 https://www.cnblogs.com/wenbosheng/p/9537774.html 一般来说需要两次运行排版命令才能生成引用编号.背后的原理是这样的,第一 ...
- 1. Two Sum&&15. 3Sum&&18. 4Sum
题目: 1. Two Sum Given an array of integers, return indices of the two numbers such that they add up t ...
- 学习笔记-AngularJs(八)
在使用form.FormController和ngModel.NgModelController之前,先来学习一下怎么一个ng-model-options指令,觉得怎么这个指令挺好用的,我们知道ng- ...
- jquery promise (Deferred)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- .Netcore使用Session
1.使用Session(进程内) 在startup中添加方法 services.AddSession app.UseSession() services.AddDistributedMemoryCa ...
- python-类的约束,MD5,异常处理,日志
# # 项目经理 # class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了notImplementedError 继承他 直接重写他 # ...