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

  1. @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
    @component (把普通pojo实例化到spring容器中,相当于配置文件中的 
    <bean id="" class=""/>

  1. PS: @Componet只适合单独bean的状态,无依赖,如果说是beanbean之间有依赖的话,还是要用Autowired(也就是BeanBean

@Autowried 和 @inject可以互换

PS: 传统装配的类型

  1. PS: 有些第三方的类无法装配bean,就只能使用java代码装配了。也就是之前的并不可能解决所有的问题。

PS: 并不是所有的场景都可以自动的装配的,这时候就得使用 xml配置或者 Java(JavaConfig是替代Java更好的解决方案)配置了

JavaConfig

1.创建配置类 @Configration(如果ComponentScan去掉就不报错,还必须使用@Bean把对象注入进去)

2.声明bean  @Bean

3.借助JavaConfig实现注入

  1. package soundsystem;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4.  
  5. @Configuration
  6. public class CDPlayerConfig {
  7.  
  8. @Bean
  9. public CompactDisc compactDisc() {
  10. return new SgtPeppers();
  11. }
  12.  
  13. @Bean
  14. public CDPlayer cdPlayer(CompactDisc compactDisc) {
  15. return new CDPlayer(compactDisc);
  16. }
  17.  
  18. }

通过xml装配bean

@Import

PS: 根据环境的变化,修改配置文件

  1. package com.myapp;
  2.  
  3. import javax.sql.DataSource;
  4.  
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.context.annotation.Profile;
  8. import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
  9. import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
  10. import org.springframework.jndi.JndiObjectFactoryBean;
  11.  
  12. @Configuration
  13. public class DataSourceConfig {
  14.  
  15. @Bean(destroyMethod = "shutdown")
  16. @Profile("dev")
  17. public DataSource embeddedDataSource() {
  18. return new EmbeddedDatabaseBuilder()
  19. .setType(EmbeddedDatabaseType.H2)
  20. .addScript("classpath:schema.sql")
  21. .addScript("classpath:test-data.sql")
  22. .build();
  23. }
  24.  
  25. @Bean
  26. @Profile("prod")
  27. public DataSource jndiDataSource() {
  28. JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
  29. jndiObjectFactoryBean.setJndiName("jdbc/myDS");
  30. jndiObjectFactoryBean.setResourceRef(true);
  31. jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
  32. return (DataSource) jndiObjectFactoryBean.getObject();
  33. }
  34.  
  35. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  4. xmlns:jee="http://www.springframework.org/schema/jee" xmlns:p="http://www.springframework.org/schema/p"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/jee
  7. http://www.springframework.org/schema/jee/spring-jee.xsd
  8. http://www.springframework.org/schema/jdbc
  9. http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
  10. http://www.springframework.org/schema/beans
  11. http://www.springframework.org/schema/beans/spring-beans.xsd">
  12.  
  13. <beans profile="dev">
  14. <jdbc:embedded-database id="dataSource" type="H2">
  15. <jdbc:script location="classpath:schema.sql" />
  16. <jdbc:script location="classpath:test-data.sql" />
  17. </jdbc:embedded-database>
  18. </beans>
  19.  
  20. <beans profile="prod">
  21. <jee:jndi-lookup id="dataSource"
  22. lazy-init="true"
  23. jndi-name="jdbc/myDatabase"
  24. resource-ref="true"
  25. proxy-interface="javax.sql.DataSource" />
  26. </beans>
  27. </beans>

@Conditional

--------------------------在Autowired的时候会存在歧义

PS: 使用@Primary 和@Qualifier

PS: prototype就是多例

@Scope

----------运行时注入,读取配置文件

@ProtertySource

---------------------------------------------------------------------------

 例子是抄电表

Spring AOP详解

PS: 重点!!!!!!!!!!!!     这五种方式说明何时调用通知

PS: 这两个是一样的

PS: home 视图解析, home将会被解析为/WEB-INF/views/home.jsp

PS:春河说的校验表单参数

  1. package spittr;
  2.  
  3. import javax.validation.constraints.NotNull;
  4. import javax.validation.constraints.Size;
  5.  
  6. import org.apache.commons.lang3.builder.EqualsBuilder;
  7. import org.apache.commons.lang3.builder.HashCodeBuilder;
  8. import org.hibernate.validator.constraints.Email;
  9.  
  10. public class Spitter {
  11.  
  12. private Long id;
  13.  
  14. @NotNull
  15. @Size(min=5, max=16)
  16. private String username;
  17.  
  18. @NotNull
  19. @Size(min=5, max=25)
  20. private String password;
  21.  
  22. @NotNull
  23. @Size(min=2, max=30)
  24. private String firstName;
  25.  
  26. @NotNull
  27. @Size(min=2, max=30)
  28. private String lastName;
  29.  
  30. @NotNull
  31. @Email
  32. private String email;
  33.  
  34. public Spitter() {}
  35.  
  36. public Spitter(String username, String password, String firstName, String lastName, String email) {
  37. this(null, username, password, firstName, lastName, email);
  38. }
  39.  
  40. public Spitter(Long id, String username, String password, String firstName, String lastName, String email) {
  41. this.id = id;
  42. this.username = username;
  43. this.password = password;
  44. this.firstName = firstName;
  45. this.lastName = lastName;
  46. this.email = email;
  47. }
  48.  
  49. public String getUsername() {
  50. return username;
  51. }
  52.  
  53. public void setUsername(String username) {
  54. this.username = username;
  55. }
  56.  
  57. public String getPassword() {
  58. return password;
  59. }
  60.  
  61. public void setPassword(String password) {
  62. this.password = password;
  63. }
  64.  
  65. public Long getId() {
  66. return id;
  67. }
  68.  
  69. public void setId(Long id) {
  70. this.id = id;
  71. }
  72.  
  73. public String getFirstName() {
  74. return firstName;
  75. }
  76.  
  77. public void setFirstName(String firstName) {
  78. this.firstName = firstName;
  79. }
  80.  
  81. public String getLastName() {
  82. return lastName;
  83. }
  84.  
  85. public void setLastName(String lastName) {
  86. this.lastName = lastName;
  87. }
  88.  
  89. public String getEmail() {
  90. return email;
  91. }
  92.  
  93. public void setEmail(String email) {
  94. this.email = email;
  95. }
  96.  
  97. @Override
  98. public boolean equals(Object that) {
  99. return EqualsBuilder.reflectionEquals(this, that, "firstName", "lastName", "username", "password", "email");
  100. }
  101.  
  102. @Override
  103. public int hashCode() {
  104. return HashCodeBuilder.reflectionHashCode(this, "firstName", "lastName", "username", "password", "email");
  105. }
  106.  
  107. }

PS: 看公司代码

  1. PS:自定义异常处理
    通常是使用

@ControllerAdvice

PS: 这个就是 执行的顺序, 有点类似Activity

PS: 使用spring 的拦截器,只用一个就行 了。

PS: 可以在测试 和 调试阶段添加  验证账户

----------------------------------------Spring源码学习

PS:学习的代码是spring 3.2

PS:阅读源码最好的办法就是跟着  事例 操作一遍

PS: XMLBeanFactory继承自 1,  而 1 是整个bean加载的核心部分;

-------------------------------------------------------------------------------------------------------------------------------

PS: SpringMVC是基于Servlet功能实现的

Spring的学习和源码的学习的更多相关文章

  1. Dapper源码学习和源码修改

    之前ORM比较火热,自己也搞了个WangSql,但是感觉比较low,大家都说Dapper性能好,所以现在学习学习Dapper,下面简单从宏观层面讲讲我学习的Dapper. 再了解一个东西前,先得学会使 ...

  2. Dapper源码学习和源码修改(下篇)

    目录: Dapper源码学习和源码修改(上篇主要讲解入参解析) Dapper源码学习和源码修改(下篇主要讲解出参解析) 继上篇讲了下自己学习Dapper的心得之后,下篇也随之而来,上篇主要讲的入参解析 ...

  3. Unsafe 学习和源码阅读

    在代码中获取 Unsafe 对象的方法: // 在 AtomicInteger 里面是这么用的private static final Unsafe unsafe = Unsafe.getUnsafe ...

  4. Java源码详解系列(十一)--Spring的使用和源码

    Spring 是一个一站式的 Java 框架,致力于提高我们项目开发的效率.通过 Spring,我们可以避免编写大量额外代码,更专注于我们的核心逻辑.目前,Spring 已经成为最受欢迎的 Java ...

  5. ssh repo ----> struts+hibernate+spring( jar包和源码)各版本下载链接

    struts http://archive.apache.org/dist/struts/ hibernate http://hibernate.org/orm/releases/5.0/ sprin ...

  6. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  7. spring源码学习(三)--spring循环引用源码学习

    在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...

  8. 曹工说Spring Boot源码(26)-- 学习字节码也太难了,实在不能忍受了,写了个小小的字节码执行引擎

    曹工说Spring Boot源码(26)-- 学习字节码也太难了,实在不能忍受了,写了个小小的字节码执行引擎 写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean De ...

  9. Spring源码解析02:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析

    一. 前言 Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别.本篇就以BeanFactory基 ...

随机推荐

  1. Docker镜像Push到DockerHub

    1.自己整理的容器首先通过commit做成本地镜像 docker commit -a "Cristin" -m "测试开发平台Jenkins" 281eef85 ...

  2. Webpack + vue 搭建

    前言: 为何使用webpack? 为何相对于gulp&grunt更有优势 WebPack(前往官网)可以看做是模块打包机:直接分析项目结构,找到JavaScript模块以及其它的一些浏览器不能 ...

  3. dump总结

    •http://blog.csdn.net/lkforce/article/details/60878295 •日志文件生成 •方法1 •jmap -dump:format=b,file=201703 ...

  4. R语言-默认镜像设置

    问题1:如何设置默认镜像 你希望下载某些R包,因此希望设定默认的CRAN网站镜像,这样R每次下载时不需要你选择镜像. 解决方案 该方案要求用户R系统中包含一个.Rprofile文件,如方法3.16描述 ...

  5. TeXstudio+TexLive交叉引用

    LaTeX 交叉引用系统简介 https://www.cnblogs.com/wenbosheng/p/9537774.html 一般来说需要两次运行排版命令才能生成引用编号.背后的原理是这样的,第一 ...

  6. 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 ...

  7. 学习笔记-AngularJs(八)

    在使用form.FormController和ngModel.NgModelController之前,先来学习一下怎么一个ng-model-options指令,觉得怎么这个指令挺好用的,我们知道ng- ...

  8. jquery promise (Deferred)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. .Netcore使用Session

    1.使用Session(进程内) 在startup中添加方法 services.AddSession  app.UseSession() services.AddDistributedMemoryCa ...

  10. python-类的约束,MD5,异常处理,日志

    # # 项目经理 # class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了notImplementedError 继承他 直接重写他 # ...