Spring-boot 实战
Spring-boot 实战
蔡跃东-即刻行动 发表于3个月前
Spring-boot 实战
  • 发表于 3个月前
  • 阅读 11
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

spring boot
    介绍
        spring
            模块
            生态
            快速搭建
                maven
            spring tool suite
            intelli idea
        初始搭建
开发过程
            Spring Boot是由Pivotal团队提供的全新框架,
其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
通过这种方式,
Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者
        特点
            1. 创建独立的Spring应用程序
            2. 嵌入的Tomcat,无需部署WAR文件
            3. 简化Maven配置
            4. 自动配置Spring
            5. 提供生产就绪型功能,如指标,健康检查和外部配置
            6. 绝对没有代码生成和对XML没有要求配置
        评价
            https://www.zhihu.com/question/39483566
            https://www.oschina.net/question/tag/spring-boot
            评价
                独立运行的Spring项目
                内嵌Servlet容器
                Starter简化Maven配置
                自动配置Spring
                准生产的应用监控(http\ssh\telnet)
                无代码生成和xml配置(使用Java配置和注解配置组合)
    实战
        基础
            4原则
                1、POJO轻量级和最小侵入式开发
                2、DI和 基于接口编程 实现松耦合
                3、通过AOP和COC
                    COC原则
                        默认习惯进行声明式编程
                4、使用AOP和模板(template)减少模式化代码
                    template
                        http://blog.csdn.net/5iasp/article/details/12206793
                    JDBC样式代码
                        JNDI
                        JMS
                        REST
                        JdbcTemplate
            IOC
                IOC & DI
                解耦,组合
                Bean声明注解(等效)
                    @Component
                    @Service
                    @Repository
                    @Controller
                    等效,只是在不同的层使用
                Bean注入注解(属性,通用)
                    @Autowired
                        spring
                    @Inject
                        jsr-330
                    @Resource
                        jsr-250
                    可以注解在set方法上或属性
                @ComponentScan("com.uket")
                    自动扫描包名下声明注解,并注册为Bean
                Java配置类
                    全局配置用Java配置(数据、mvc相关)
                        业务bean的配置用注解(@Service、@Component、@Repository、@Controller)
                    @Configuration
                        声明是一个配置类
                        相当于Spring配置xml
                    @Bean 方法上返回一个Bean
                        声明当前方法返回一个bean
                        未使用@AutoWired、@Component标签时用
                    UseFunctionService
                        P40
            AOP
                AspectJ注解切面编程
                    @After
                    @Before
                    @Around
                        定义建言(advice)
                    @PointCut
                        定义拦截规则
                注解拦截
                    @Transcational
                    @Cacheable
                    @Log
                    @Aspect
                    @EnableAspectJAutoProxy
                JDK1.5 注解
                    @Target(ElementType.METHOD)
                    @Retention
                    @Documente
                实战
                    @Action(name=“注解式拦截add操作”))
                    @Aspect
                    @Component
                    注解拦截
                        @Pointcut(“@annotation(com.uket.cn.aop.Action)”)
                            声明处理的切入点
                            Action
                            http://blog.csdn.net/java18/article/details/7530007
                            http://blog.csdn.net/zmx729618/article/details/51206328
                        @After("annotationPointCut()")
                    方法规则拦截
                        @Before(“execution(*com.wisely.highligt_springg4.DemoMethodService.*(..)*”)
                            直接用拦截规则拦截Method作为参数
                开启AOP支持
                    @EnableAspectJAutoProxy
            Context
                BeanFactory
                ApplicationContext
                AnnotationConfigApplicationContext
        常用配置
            Bean的Scope
                @Scope
                Singleton(默认)、
Prototype、
Request、
Session、
GlobalSession、
            Spring EL&资源调用
                @Value 表达式
                    ("xxxx")
                      ("#{systemProperties['os.name']}")
                      ("#{T(java.lang.Math).random() * 100.0}")
                      ("#{demoService.another}")
                      ("classpath:com/uket/test.txt")
                      ("www.baidu.com")
                      ("${book.name}")  //资源
                @PropertyRource("classpath:com/uket/test.properties")
                    加载文件
            初始化&销毁 (两种方式)
                jsr250支持
                    @PostConstruct
                    @PreDestory
                Bean
                    创建后、销毁前的必要操作
                    @Bean(initMethod="init",destoryMethod="destory")
                P55
            Profile环境配置
                不同环境提供不同配置
                    通过设定
                        context.getEnviroment().setActiveProfiels("prod");
                            选择不同的Bean
                        jvm的spring.profile.active来配置环境
                        web.xml Servlet 的 context parameter
                            2.5级以下
                                xml
                            servlet 3.0
                                spring.profiles.default="dev"
                @Profile("dev")
                @Profile("prod")
                context.register(ProfileConfig.class) -->@ComponentScan
                    后注册配置类
                    不然会报Bean未定义
            事件Application Event
                定义事件
                    DemoEvent extends ApplicationEvent
                事件监听
                    implements ApplicationListener<DemoEvent>
                发布事件
                    applicationContext.publishEvent(new DemoEvent(this,msg))
        高级功能
            Spring 提供 Aware
                DI亮点是 Bean对Spring是存在无意识
                Spring Aware Bean与Spring框架耦合
                BeanNameAware
                BeanFactoryAware
                ApplicationContextAware
                MessageSourceAware
                ApplicationEventPublisherAware
                ResourceLoaderAware
                --------
                setBeanName 自动传入beanname
                setResourceLoader 自动传入resource
            多线程
                通过TaskExecutor任务执行器,线程池等。
                
                    @EnableAsync //异步支持
                    TaskExecutorConfig implements AsyncConfigurer
                    ThreadPoolTaskExecutor 
                        taskExecutor.setCorePoolSize(5);
                        taskExecutor.setMaxPoolSize(5);
                    @Async //bean的方法注解,异步任务
                    asyncTaskService.executeAsyncTask(i);
            计划任务
                @EnableScheduling    //计划任务支持
                @Scheduled //声明一个计划任务,cron、fixDelay、fixRate
            条件注解
                Condition
                    boolean matches(Condition context,AannotatedTypeMetadata metadata)
                    context.getBean(ListService.class)
                        接口对象
                        @Bean
                        @Configuration
                LinuxCondition implements Condition{ }
                @Conditional(LinuxCondition.class)
                    @Configuration
                        进行Condition的设置
                    系统自动按照match接口选择方法执行
            组合注解与元注解
                模板代码消除相同多个注解在各个类中
                元注解注解到别的注解上的注解,被注解的注解称组合注解
                @Configuration //就是组合注解,包含@Component功能
                @ComponentScans
            @Enable*注解的工作原理
                @EnableWebMvc
                    @import
                        @Import(CDPlayerConfig.class)  
                        @ImportResource("classpath:cons-injec.xml") //导入xml配置项
                @EnableConfigurationProperties//注解配置Bean支持
                    属性注入
                @EnableJpaRepositories
                @EnableTransactionManagement //事务支持
                @EnableCaching
                ......直接导入,条件选择,动态注册
            测试
                TestContext
                     顶级支持 集成Junit、TestNG
                DemoTest
                    @RunWith(SpringJunit4ClassRunner.class)
                    @ContextConfiguration("TextConfig.class") //配置ApplicationContext
                    @ActiveProfiles("prod") //确定活动的profile
        MVC
            基础
                Model 用来与V直接数据交互、传值
                MVC 三层用Spring框架负责管理(@Controller、View、Model)
                DAO层,数据访问层,@Service
            快速搭建
                Demo
                    resources/logback.xml //日志级别建议debug查看更详细的错误
                    src/main/resources/index.jsp下简历views
                    View ViewResolver.resloveViewName() 
                        使用Model、Request、Response对象
                        渲染视图返回浏览器
                        viewResolver.setViewClass(JstlView.class)
                    web.xml
                        WebInitializer implements WebApplicationInitializer
                        实现Web配置
                        onStartup
                        sc.addServlet("",new DispatcherServlet(ctx))
                            DispatchServlet 开发Web项目
                        ctx.register(MyMvcconfig.class)
                Thymeleaf
            注解
                jackson-databind
                @RestController
                    是@Controller和@ResponseBody组合注解
            静态资源
                addResourceHandlers("/assert/**").addResourceLocations("classpath:/static/")
                对外访问路径/文件放置目录
            拦截器
                Filter
                    实现
                        HanlderInterceptor
                    继承
                        HandlerInterceptorAdapter
                preHandler
                    postHandler
                        afterCompletion
                config WebMvcConfigurerAdapter
                    addInterceptors
            全局控制器 @ControllerAdvice
                http://jinnianshilongnian.iteye.com/blog/1866350
                @ControllerAdvice
                @ExceptionHandler(value = Exception.class)
                    拦截所有exception
                @InitBinder
                    WebDataBinder
                        web参数到java objects绑定
                    绑定请求到Model中
                @ModelAttribute
                    绑定键值对到ui.Model里
                    model.addAttribute("msg","额外")
                代码
                    tomcat 为什么没有run
                        spring boot
                    WebDataBinder
                        http://www.cnblogs.com/AloneSword/p/3998943.html
            其他
                快捷ViewController
                    简单页面转向
                    WebMvcConfigurerAdapter
                路径参数匹配
                    configurePathMatch
                    configurer.setUseSuffixPatternMatch(false)
            高级配置
                上传文件
                    commons-fileupload
                    div class="upload"
                        action="upload"
                    viewController
                        toUpload
                        upload
                    MultipartResolver
                            @Bean
    public MultipartResolver multipartResolver() {
                    upload
                        写入本地文件
                HttpMessageConverter
                    处理request和response里面的数据
                        针对媒体类型进行处理
                        x-wisely
                    Converter
                        MappingJackson2HttpMessageConverter
                        StringHttpMessageConverter
                        继承AbstractHttpMessageConverter<DemoObj>
                    注册
                        configureMessageConverters
                            覆盖注册多个HttpMessageConverter
                        extendMessageConverters
                            添加一个
                                MyMessageConverter
                    @requestMapping(value="",proeduces="applicaton/x-wisely")
                deferredResult.setResult(obj)
                    @Scheduled(fixedDelay=5000)
                测试
                    @ContextConfiguration(classes={MyMvcConfig.class})
@WebAppConfiguration("src/main/resource")
                    MockMvc
                    autowired
                        WebApplicationContext
                        MockHttpSession
                        MockHttpServletRequest
                    mockMvc.proform().andExpect(status.isOk)
             .andExpect(view().name("page"))
        boot
            项目
                http://start.spring.io
                spring-boot-starter-parent
                    version统一管理
                starter
                    spring-boot-starter     这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
                    spring-boot-starter-freemarker     支持FreeMarker模板引擎。
                    spring-boot-starter-velocity     支持Velocity模板引擎。
                    spring-boot-starter-web     S支持全栈式Web开发,包括Tomcat和spring-webmvc。
                    spring-boot-starter-aop     支持面向方面的编程即AOP,包括spring-aop和AspectJ。
                    spring-boot-starter-cache     支持Spring的Cache抽象。
                    spring-boot-starter-security     支持spring-security。
                    spring-boot-starter-jersey     支持Jersey RESTful Web服务框架。
                    spring-boot-starter-mail     支持javax.mail模块。
                    spring-boot-starter-data-jpa     支持JPA(java Persistence API),包括spring-data-jpa、spring-orm、hibernate。
                    spring-boot-starter-jdbc     支持JDBC数据库。
                    spring-boot-starter-actuator     帮助监控和管理应用。
                    替换技术
                        spring-boot-starter-jetty     引入了Jetty HTTP引擎(用于替换Tomcat)。
                        spring-boot-starter-log4j     支持Log4J日志框架。
                        spring-boot-starter-logging     引入了Spring Boot默认的日志框架Logback。
                        spring-boot-starter-tomcat     引入了Spring Boot默认的HTTP引擎Tomcat。
                第三方starter
                    Apache Cammel
                工具
                    eclipse
                    intellij idea
                    Spring boot CLI
            @SpringBootApplication
                *Application的入口类
                @SpringBootConfiguration
                @EnableAutoConfiguration
                    EnableAutoConfigurationImportSelector.class
                        META-INF/spring.factories
                    AutoConfigurationPackages.Registrar.class
                    spring-boot-autoconfigure-1.xx.jar
                
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
            Spring Boot运行原理
                spring-boot-autoconfigure-xxx.jar
                运作原理
                核心注解
                    @Conditional
                        @ConditionOn
                            Bean
                            Class
                            Expression
                            Java
                            Jndi
                            MissingBean
                            MissingClass
                            NotWebApplication
                            Property
                            Resource
                            SingleCandidate
                            WebApplication
                实例分析
                    CharacterEncodingFilter
                        encoding
                            UTF-8
                        forceEncoding
                            true
        web
            Web开发支持
                org.springframework.boot.autoconfigure.web
                内嵌Servlet
                自动配置http编码
                自动配置上传文件
                自动配置MappingJackson
                Spring Mvc
            Thymeleaf模板引擎
            Web 相关配置
            Tomcat配置
                http转向https
                    P210
            Favicon配置
                favicon.ico
            WebSocket
                @MessageMapping
                @SendTo
            Bootstrap & AngularJS
                bootstrap
                    页面模板
                    css支持
                        布局
                        html
                    页面组件支持
                        各类扩展支持
                AngularJS
                    声明式数据模板+数据绑定
                        类似JSP\Thymeleaf
                        MVW
                        MVVM
                        MVC
                    最简单的AngularJS
                        ng-model
                    纯页面的MVC
                        angular.module
                        $scope
                            ng-controller的范围
                        Event
                            冒泡事件
                                $scope.$emit
                                $scope.$on
                            广播事件
                                $scope.$broadcast
                        $routeProvider
                            .when('/view',{
            controller:'Controller1'
            templateUrl:'view1.html'
})
.when .......
                            <a href="#/view1">
                                定义路由
                        DI
                            Controller中注入scope对象
                                angular.module('firstmodule')
        .controller("",{})
                        Service
                            $location
                            $timeout
                            $rootScope
                        Factory
                            注入调用
                        $http
                            .get(url)
                            .post(url,data)
                            .put(url,data)
                            .delete(url)
                            .head(url)
                        自定义
                            ng-repeat
                            ng-show
                            ng-model
                            子主题 4
                样例
        data数据访问
            JPA
                JpaRepository<Person,Long>
                    定义Interface名称指向查询
                        findBy
                        Like
                        And
                        样例
                            
                    限制结果
                        top或first
                    NamedQuery查询
                        @NamedQuery
                01
                    Hibernate
                        Eclipse Link
                        Open Jpa
                    常规查询
                        JPQL
                    NamedQuery
                        interface 定义的不是按照方法名
                        按照@Entity的@NameQuery设置
                    @Query
                        interface
                            ?1
                            :address
                        @Modify
                        @Transaction
                    Specification
                        JpaSpecificationRepository
                        CriteriaBuilder
                        CriteriaQuery
                        Predicate
                        Root
                        import Static com.uket.spec.Specs.*
                        List <person> people=personRepository.findByAll(personFromHefei())
                        分页排序
                            List
                            Page
                                子主题 1
                    自定义Respository
                        CustomerRespository
                        CustomerRespositoryImpl
                        CustomerJpaRespositoryFactoryBean
                            CustomerJpaRespositoryFactory
                        @EnableJpaRespositories
                PagingAndSortingRepository
                支持
                    jdbc
                        jpa
                            依赖于jdbc
                        spring.datasource
                        @EnableTranstactionManagement
                        schema.sql
                        data.sql
                    默认Hibernate
                        依赖 DataSourceAutoConfiguration
                    SpringDataJpa自动配置
                    Oracle EX
                        限制4G数据
                    定义映射实体类
            其他
                Docker
                    生成脱离虚拟机运行在Linux的 dmg
                        秒级启动
                    未来云计算的趋势paas
                    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,
然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
            Data REST
                Spring Data REST入门(一):两行代码搞定RESTFul
                http://blog.csdn.net/soul_code/article/details/54108105
                Restful
                    增删改查
                定制
                    spring.data.rest.base-path=/api
                    restful 默认实体后加s表示路径
                        persons
                        @RespositoryRestResponse(path="people")
            声明式事务
                PlateformTransactionManager
                    DataSourceTransactionManager
                    JpaTransactionManager
                    HibernateTransactionManager
                @Transactional
                    org.springframework.transaction.annotation
                    @EnabelTransactionManagement
                    参数
                        propagationtion
                            REQUIRED
                        isolation
                            default
                                数据库隔离级别
                        timeout
                        readOnly
                        rollbackfor
                        noRollbackFor
                类级别@Transactional
                Spring Data Jpa 事务
                    simpleJpaRespository
                Spring boot 事务
            数据Cache
                CacheManager
                    SimpleCacheManager
                    ConcurrentMapCacheManager
                    EhcacheCacheManager
                    RedisCacheManager
                声明式缓存@AOP
                    @Cacheable
                    @CachePut
                    @CacheEvict
                    @Caching
                配置
                    spring.cache.type=generic
                Service层支持Cache
                    切换缓存
            非关系型NoSQL
        企业级
            安全控制
            批处理 Spring batch
                处理大量数据的操作框架
                job处理
                    jobRespository
                    jobLauncher
                    job
                    setp
                    ItemReader
                    ItemProcesser
                    ItemWriter
                @EnableBatchProcessing
                数据输出计划任务
            JMS 异步消息
                点对点
                    确保每条消息只有唯一的发送者和接受者
                    topic
                        发送者
                        订阅者
                spring支持
                    @jmsListener
                    @EnableJms
                    spring.activemq.tcp=tcp://localhost:61666
                        activemq
                        安装
                        内嵌
                            org.apache.activemq
                    MessageCreator
                    CommandLiner
                        jsmTemplate.send()
                    @JmsListenser
            系统集成 Spring Integration
                要点
                    Message
                    Channel
                    Message EndPoint
            热部署
            常规部署
            云部署
            boot 测试
        spring Security
            spring security
                Authentication
                    认证
                Authorization
                    授权
            实战
                1、定义XXXInitializer
加载安全过滤器注册(相当于web.xml)
                    继承AbstractSecurityWebApplicationInitializer
                        接口WebApplicationInitiallizer
                        onStartup
                    调用了insertSpringSercurityFilterChain,调用了注册了DelegatingFilterProxy
                    注册一个多过滤器 DelegatingFilterProxy 来实现
                2、@EnableWebSecurity
注册在WebSecurityConfig
认证配置来源、授权范围
                    WebSecurityConfigurerAdapter
                    configure
                        (HttpSecurity http)
请求授权
                    configure
                        (AuthenticationManagerBuilder auth)
用户认证
                            定制登录行为
                    Configure
                        (WebSecurity web)
                3 认证configure
                    (HttpSecurity http)
                        请求授权
                            antMatchers
                                ant风格
                            regexMatchers
                                regex正则表达式
                        anyRequest
                        定制登录行为
                            configure
                                    //登录行为定制的简短代码演示
        http.formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/index")
            .failureUrl("/login?error")
            .permitAll()
            .and()
            .rememberMe()
                .tokenValiditySeconds(1209600) //两周
                .key("uket.cn-springboot-websecurity") //key的名称
            .and()
            .logout()
                .logoutUrl("/custom-logout")
                .logoutSuccessUrl("/logout-success")
                .permitAll();
                    (AuthenticationManagerBuilder auth)
                        内存用户
                            auth.inMemoryAuthentication
                        jdbc用户
                            auth.jdbcAuthentication()
                        通用用户
                            实现
                                UserDetailsService
                            返回
                                User
                                    实现UserDetailService接口
                                    getAuthorities
                                        Returns the authorities granted to the user
                                GrantedAuthority
                                    GrantedAuthority有一个简单实现SimpleGrantedAuthority。
该类只是简单的接收一个表示权限的字符串
                            注册
                                customUserService
                                configure
                                    auth.userDetailsService(customUserService())
                    (WebSecurity web)
        应用监控
            http
            jmx
            ssh
    网站
        样例
        jhipster
            简单来说是一个基于nodejs+yeoman的java代码生成器。
            毫不客气的说 :学会了这套框架,你就是程序开发/程序架构界的潮男。
hipster的意思就是:追求新奇的人。
            angularjs+Spring+hibernate
            往大了说是基于java的一套微服务解决方案。
请注意是一整套的微服务解决方案。
jhipster在整个程序架构上都做好了整合,

包括前端mvvm框架(angularjs)
,前端构建工具(gulp)到后端的微服务框架(spring cloud)和hibernate/mongodb,
再到单元测试/ui测试。
    注解
        Annotation
            JDK1.5
                @Target
                    ElementType.TYPE
                @Retention(RetentionPolicy.RUNTIME)
                @Documented
                @Inherited
                @Import
                @Deprecated
                @interface
                    注解
                @Override
            IOC
                @Component
                @Service
                @Repository
                @Controller
                    @ControllerAdvice
                        http://jinnianshilongnian.iteye.com/blog/1866350
                        加强版的Controller
                            全局放在同一个位置
                        @ExceptionHandler
                        @InitBinder
                        @ModelAttribute
                    @RestController
                        @ResponseBody + @Controller合在一起的作用
                        只是使用@RestController注解Controller,
                        则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
                        例如:本来应该到success.jsp页面的,则其显示success
                    @ResponseBody
                        返回数据内容
                        如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行
                        如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解
                        HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
                        http://snowolf.iteye.com/blog/1628861
                    @RequestBody
                @Bean
                    告诉Spring容器,你可以从下面这个方法中拿到一个Bean
                    随着configuration注入一次单例
                    @Bean(initMethod="init",destroyMethod="destroy") 
                        ==
                            @PostConstruct
            DI
                @Autowired
                    spring
                @Inject
                    jsr-330
                @Resource
                    jsr-250
                可以注解在set方法上或属性
            AOP
                @Action(name=“注解式拦截add操作”))
                @Aspect
                @Component
                @Pointcut(“@annotation(com.uket.cn.aop.Action)”)
                    声明处理的切入点
                    Action
                    http://blog.csdn.net/java18/article/details/7530007
                    http://blog.csdn.net/zmx729618/article/details/51206328
                @After("annotationPointCut()")
                @Before(“execution(*com.wisely.highligt_springg4.DemoMethodService.*(..)*”)
                    直接用拦截规则拦截Method作为参数
                @EnableAspectJAutoProxy
                场景
                    @Transcational
                        @EnableTransactionManagement
                    @Cacheable
                        @EnableCaching
                        @CachePut
                            @CachePut:这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中。
                        @CacheEvict
                            主要针对方法配置,能够根据一定的条件对缓存进行清空
                        @Caching
                    @Log
                    @Aspect
                    @EnableAspectJAutoProxy
            TYPE
                @RequestMapping
                    @Mapping
                    键值信息放入mapping
                @Value 
                    EL资源
                @Param
                @Bean
                @Order
                    Spring中的事务是通过aop来实现的
                    @AspectJ的方法中实现org.springframework.core.Ordered 这个接口来定义order的顺序
order 的值越小,说明越先被执行
                @Scope
            @Conditional
                http://wiselyman.iteye.com/blog/2002449
                Condition
                    matches
                @ConditionOn
                    Bean
                    Class
                        判断类路径中是否存在,且当容器中没有这个Bean的情况下自动配置这个Bean
                        通过非@Component,注入进入容器中
                    Expression
                    Java
                    Jndi
                    MissingBean
                        http://blog.csdn.net/xiaoyu411502/article/details/47905525
                        说明Spring Boot仅仅在当前上下文中不存在Mongo对象时,才会实例化一个Bean。
这个逻辑也体现了Spring Boot的另外一个特性
——自定义的Bean优先于框架的默认配置,
我们如果显式的在业务代码中定义了一个Mongo对象,那么Spring Boot就不再创建。
                    MissingClass
                    NotWebApplication
                    Property
                    Resource
                    SingleCandidate
                    WebApplication
                        
                应用helloMsg
                    @ConfigurationProperties(prefix="spring.http.encoding")
                        自动存取application.properties中的bean值
                    @EnableConfigurationProperties(HttpEncodingProperties.classs)
                    @ConditionOnClass(CharacterEncodingFilter.class)
                        encoding
                            UTF-8
                        forceEncoding
                            true
                    @ConditionalOnProperty (prefix="",value="",matchIfMissing=true)
                        @Autowired
    private HelloServiceProperties hsp;
    
    @Bean
    @ConditionalOnMissingBean(HelloService.class)
    public HelloService helloService(){
        HelloService hs= new HelloService();
        hs.setMsg(hsp.getMsg());
        return hs;
    }
                    注册配置
                        新建META-INF/spring.factories 注册内容
                        maven进行加载
                            @Autowired
                            自动加入形成配置基础文件
            @Profile("dev")
                application-{profile}.properties
                    application.properties
                        spring.profiles.active=prod
                    application-prod.properties
            @ComponentScan
            @EnableAutoConfiguration
                spring.facotry
                @ImportAutoConfiguration
                EnableAutoConfigurationImportSelector
            @EnableWebSecurity
            @EnableJpaRepositories
                JpaConfiguration
                    EntityManagerFactory
                    DataSource
                    PlatformTransactionManager
            @SpringBootApplication
                exclude()
                SpringApplication
                application.properties
                @ImportResource
            @ConfigurationProperties
                prefix
                location
            @NoRepositoryBean
                这样Spring Data Jpa在启动时就不会去实例化BaseRepository这个接口
            JPA
                @NamedQuery
                    @Entity
                    在Entity中定义影射到一个PersonResository的查询语句
                @Query
                    注解在接口的方法上实现查询
                        参数索引?1
                        名称匹配
:address
@Param(“address”)
                        更新
                            @Modify
                            @Query(“update person p set p.name=?1”)
                            @Transaction
                        Criteria
                            继承 JpaSpecificationExecutor<Person>
                            specification
                                Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
                                cb.equal(root.get("address","合肥"))
                            静态导入 PersonRepository
                                import static com.uket.CustomerSpecs.*
                                personRepository.findAll(personFromHefei());
                        排序和分页
                            Sort
                            Page
                            Pageable
                @Entity
                @Id
                @GeneratedValue
                @ManyToMany(cascade = {CascadeType.REFRESH},fetch = FetchType.EAGER)
            Restful
                RepositoryRestMvcConfiguration
                @Import(RepositoryRestMvcconfiguration.class)
                @RestResource
            @Test
                @RunWith
                @SpingApplicationConfiguration
                @WebAppConfiguration
                @Before
    Demo
        注解
            @EnableAspectJAutoProxy
        DI
            @Autowired
        JAVA CONFIG
             @Bean
        Scope
            @Scope("prototype")
        el
            @Value
            @Autowire
Environment environment
        初始化与销毁(构造先执行)
            @Bean
                initMethod
                destoryMethod
            jsr250
                @PostConstruct
                @preDestory
        Profile
            spring.profiles.active
                2.5
                    xml下配置
                3.0
                    implement WebApplicationInitalizar
            @Profile
                编译器进行价值
            context.register(Config.class)
        Application Event
            Observe 模式 消息机制
        Spring Aware
            beanname
                BeanNameAware
                直接获得Bean名字
            ResourceLoader
                ResourceLoaderAware
                获得资源加载器
        taskexecutor 多线程
        taskscheduler 任务调度
        Conditional 条件注解
            根据特定的条件进行Bean的创建行为
            @Conditional注解的内容Matcher内容先执行再创建对象
            程序启动前按照环境指定创建的类,按照 接口进行访问
        annotation
            组合注解照样可以获得Bean
        Enable*
            enable类型
                AspectJ
                Async
                Schedule
                WebMvc
                ConfigurationProperties
                JpaRespository
                TransactionManagerment
                Caching
            源码
                @import
                    直接导入
                条件选择
                    async
                        proxy
                        aspectj
                动态注册
                    ImportBeanDefinitionRegistrar
        fortest
            测试
        1
        2
        3
    查看
        Context内容
            http://blog.csdn.net/jackpk/article/details/46235815
            2.5级以下
                web.xml配置 servlet
            3.0
                无web.xml
        spring-security
        学习
            https://github.com/qibaoguang/Spring-Boot-Reference-Guide
            https://github.com/JeffLi1993/springboot-learning-example
            https://github.com/dyc87112/SpringBoot-Learning
    spring中@Resource注解的应用
         a.先使用字段名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败
 b.如果字段名字没有匹配到Bean则spring会尝试采用字段类型匹配,如果找打bean则注入,如果字段类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个bean的异常.
    分支主题 8
        @RequestMapping(value={"", "/", "index"})
    热加载
        http://www.cnblogs.com/toSeeMyDream/p/6497958.html
    Hibernate Validator
        http://blog.csdn.net/zheng963/article/details/43559951
    JPA
        java persistence api
            api
            查询接口
            O/R关系


    介绍
        spring
            模块
            生态
            快速搭建
                maven
            spring tool suite
            intelli idea
        初始搭建
开发过程
            Spring Boot是由Pivotal团队提供的全新框架,
其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
通过这种方式,
Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者
        特点
            1. 创建独立的Spring应用程序
            2. 嵌入的Tomcat,无需部署WAR文件
            3. 简化Maven配置
            4. 自动配置Spring
            5. 提供生产就绪型功能,如指标,健康检查和外部配置
            6. 绝对没有代码生成和对XML没有要求配置
        评价
            https://www.zhihu.com/question/39483566
            https://www.oschina.net/question/tag/spring-boot
            评价
                独立运行的Spring项目
                内嵌Servlet容器
                Starter简化Maven配置
                自动配置Spring
                准生产的应用监控(http\ssh\telnet)
                无代码生成和xml配置(使用Java配置和注解配置组合)
    实战
        基础
            4原则
                1、POJO轻量级和最小侵入式开发
                2、DI和 基于接口编程 实现松耦合
                3、通过AOP和COC
                    COC原则
                        默认习惯进行声明式编程
                4、使用AOP和模板(template)减少模式化代码
                    template
                        http://blog.csdn.net/5iasp/article/details/12206793
                    JDBC样式代码
                        JNDI
                        JMS
                        REST
                        JdbcTemplate
            IOC
                IOC & DI
                解耦,组合
                Bean声明注解(等效)
                    @Component
                    @Service
                    @Repository
                    @Controller
                    等效,只是在不同的层使用
                Bean注入注解(属性,通用)
                    @Autowired
                        spring
                    @Inject
                        jsr-330
                    @Resource
                        jsr-250
                    可以注解在set方法上或属性
                @ComponentScan("com.uket")
                    自动扫描包名下声明注解,并注册为Bean
                Java配置类
                    全局配置用Java配置(数据、mvc相关)
                        业务bean的配置用注解(@Service、@Component、@Repository、@Controller)
                    @Configuration
                        声明是一个配置类
                        相当于Spring配置xml
                    @Bean 方法上返回一个Bean
                        声明当前方法返回一个bean
                        未使用@AutoWired、@Component标签时用
                    UseFunctionService
                        P40
            AOP
                AspectJ注解切面编程
                    @After
                    @Before
                    @Around
                        定义建言(advice)
                    @PointCut
                        定义拦截规则
                注解拦截
                    @Transcational
                    @Cacheable
                    @Log
                    @Aspect
                    @EnableAspectJAutoProxy
                JDK1.5 注解
                    @Target(ElementType.METHOD)
                    @Retention
                    @Documente
                实战
                    @Action(name=“注解式拦截add操作”))
                    @Aspect
                    @Component
                    注解拦截
                        @Pointcut(“@annotation(com.uket.cn.aop.Action)”)
                            声明处理的切入点
                            Action
                            http://blog.csdn.net/java18/article/details/7530007
                            http://blog.csdn.net/zmx729618/article/details/51206328
                        @After("annotationPointCut()")
                    方法规则拦截
                        @Before(“execution(*com.wisely.highligt_springg4.DemoMethodService.*(..)*”)
                            直接用拦截规则拦截Method作为参数
                开启AOP支持
                    @EnableAspectJAutoProxy
            Context
                BeanFactory
                ApplicationContext
                AnnotationConfigApplicationContext
        常用配置
            Bean的Scope
                @Scope
                Singleton(默认)、
Prototype、
Request、
Session、
GlobalSession、
            Spring EL&资源调用
                @Value 表达式
                    ("xxxx")
                      ("#{systemProperties['os.name']}")
                      ("#{T(java.lang.Math).random() * 100.0}")
                      ("#{demoService.another}")
                      ("classpath:com/uket/test.txt")
                      ("www.baidu.com")
                      ("${book.name}")  //资源
                @PropertyRource("classpath:com/uket/test.properties")
                    加载文件
            初始化&销毁 (两种方式)
                jsr250支持
                    @PostConstruct
                    @PreDestory
                Bean
                    创建后、销毁前的必要操作
                    @Bean(initMethod="init",destoryMethod="destory")
                P55
            Profile环境配置
                不同环境提供不同配置
                    通过设定
                        context.getEnviroment().setActiveProfiels("prod");
                            选择不同的Bean
                        jvm的spring.profile.active来配置环境
                        web.xml Servlet 的 context parameter
                            2.5级以下
                                xml
                            servlet 3.0
                                spring.profiles.default="dev"
                @Profile("dev")
                @Profile("prod")
                context.register(ProfileConfig.class) -->@ComponentScan
                    后注册配置类
                    不然会报Bean未定义
            事件Application Event
                定义事件
                    DemoEvent extends ApplicationEvent
                事件监听
                    implements ApplicationListener<DemoEvent>
                发布事件
                    applicationContext.publishEvent(new DemoEvent(this,msg))
        高级功能
            Spring 提供 Aware
                DI亮点是 Bean对Spring是存在无意识
                Spring Aware Bean与Spring框架耦合
                BeanNameAware
                BeanFactoryAware
                ApplicationContextAware
                MessageSourceAware
                ApplicationEventPublisherAware
                ResourceLoaderAware
                --------
                setBeanName 自动传入beanname
                setResourceLoader 自动传入resource
            多线程
                通过TaskExecutor任务执行器,线程池等。
                
                    @EnableAsync //异步支持
                    TaskExecutorConfig implements AsyncConfigurer
                    ThreadPoolTaskExecutor 
                        taskExecutor.setCorePoolSize(5);
                        taskExecutor.setMaxPoolSize(5);
                    @Async //bean的方法注解,异步任务
                    asyncTaskService.executeAsyncTask(i);
            计划任务
                @EnableScheduling    //计划任务支持
                @Scheduled //声明一个计划任务,cron、fixDelay、fixRate
            条件注解
                Condition
                    boolean matches(Condition context,AannotatedTypeMetadata metadata)
                    context.getBean(ListService.class)
                        接口对象
                        @Bean
                        @Configuration
                LinuxCondition implements Condition{ }
                @Conditional(LinuxCondition.class)
                    @Configuration
                        进行Condition的设置
                    系统自动按照match接口选择方法执行
            组合注解与元注解
                模板代码消除相同多个注解在各个类中
                元注解注解到别的注解上的注解,被注解的注解称组合注解
                @Configuration //就是组合注解,包含@Component功能
                @ComponentScans
            @Enable*注解的工作原理
                @EnableWebMvc
                    @import
                        @Import(CDPlayerConfig.class)  
                        @ImportResource("classpath:cons-injec.xml") //导入xml配置项
                @EnableConfigurationProperties//注解配置Bean支持
                    属性注入
                @EnableJpaRepositories
                @EnableTransactionManagement //事务支持
                @EnableCaching
                ......直接导入,条件选择,动态注册
            测试
                TestContext
                     顶级支持 集成Junit、TestNG
                DemoTest
                    @RunWith(SpringJunit4ClassRunner.class)
                    @ContextConfiguration("TextConfig.class") //配置ApplicationContext
                    @ActiveProfiles("prod") //确定活动的profile
        MVC
            基础
                Model 用来与V直接数据交互、传值
                MVC 三层用Spring框架负责管理(@Controller、View、Model)
                DAO层,数据访问层,@Service
            快速搭建
                Demo
                    resources/logback.xml //日志级别建议debug查看更详细的错误
                    src/main/resources/index.jsp下简历views
                    View ViewResolver.resloveViewName() 
                        使用Model、Request、Response对象
                        渲染视图返回浏览器
                        viewResolver.setViewClass(JstlView.class)
                    web.xml
                        WebInitializer implements WebApplicationInitializer
                        实现Web配置
                        onStartup
                        sc.addServlet("",new DispatcherServlet(ctx))
                            DispatchServlet 开发Web项目
                        ctx.register(MyMvcconfig.class)
                Thymeleaf
            注解
                jackson-databind
                @RestController
                    是@Controller和@ResponseBody组合注解
            静态资源
                addResourceHandlers("/assert/**").addResourceLocations("classpath:/static/")
                对外访问路径/文件放置目录
            拦截器
                Filter
                    实现
                        HanlderInterceptor
                    继承
                        HandlerInterceptorAdapter
                preHandler
                    postHandler
                        afterCompletion
                config WebMvcConfigurerAdapter
                    addInterceptors
            全局控制器 @ControllerAdvice
                http://jinnianshilongnian.iteye.com/blog/1866350
                @ControllerAdvice
                @ExceptionHandler(value = Exception.class)
                    拦截所有exception
                @InitBinder
                    WebDataBinder
                        web参数到java objects绑定
                    绑定请求到Model中
                @ModelAttribute
                    绑定键值对到ui.Model里
                    model.addAttribute("msg","额外")
                代码
                    tomcat 为什么没有run
                        spring boot
                    WebDataBinder
                        http://www.cnblogs.com/AloneSword/p/3998943.html
            其他
                快捷ViewController
                    简单页面转向
                    WebMvcConfigurerAdapter
                路径参数匹配
                    configurePathMatch
                    configurer.setUseSuffixPatternMatch(false)
            高级配置
                上传文件
                    commons-fileupload
                    div class="upload"
                        action="upload"
                    viewController
                        toUpload
                        upload
                    MultipartResolver
                            @Bean
    public MultipartResolver multipartResolver() {
                    upload
                        写入本地文件
                HttpMessageConverter
                    处理request和response里面的数据
                        针对媒体类型进行处理
                        x-wisely
                    Converter
                        MappingJackson2HttpMessageConverter
                        StringHttpMessageConverter
                        继承AbstractHttpMessageConverter<DemoObj>
                    注册
                        configureMessageConverters
                            覆盖注册多个HttpMessageConverter
                        extendMessageConverters
                            添加一个
                                MyMessageConverter
                    @requestMapping(value="",proeduces="applicaton/x-wisely")
                deferredResult.setResult(obj)
                    @Scheduled(fixedDelay=5000)
                测试
                    @ContextConfiguration(classes={MyMvcConfig.class})
@WebAppConfiguration("src/main/resource")
                    MockMvc
                    autowired
                        WebApplicationContext
                        MockHttpSession
                        MockHttpServletRequest
                    mockMvc.proform().andExpect(status.isOk)
             .andExpect(view().name("page"))
        boot
            项目
                http://start.spring.io
                spring-boot-starter-parent
                    version统一管理
                starter
                    spring-boot-starter     这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
                    spring-boot-starter-freemarker     支持FreeMarker模板引擎。
                    spring-boot-starter-velocity     支持Velocity模板引擎。
                    spring-boot-starter-web     S支持全栈式Web开发,包括Tomcat和spring-webmvc。
                    spring-boot-starter-aop     支持面向方面的编程即AOP,包括spring-aop和AspectJ。
                    spring-boot-starter-cache     支持Spring的Cache抽象。
                    spring-boot-starter-security     支持spring-security。
                    spring-boot-starter-jersey     支持Jersey RESTful Web服务框架。
                    spring-boot-starter-mail     支持javax.mail模块。
                    spring-boot-starter-data-jpa     支持JPA(java Persistence API),包括spring-data-jpa、spring-orm、hibernate。
                    spring-boot-starter-jdbc     支持JDBC数据库。
                    spring-boot-starter-actuator     帮助监控和管理应用。
                    替换技术
                        spring-boot-starter-jetty     引入了Jetty HTTP引擎(用于替换Tomcat)。
                        spring-boot-starter-log4j     支持Log4J日志框架。
                        spring-boot-starter-logging     引入了Spring Boot默认的日志框架Logback。
                        spring-boot-starter-tomcat     引入了Spring Boot默认的HTTP引擎Tomcat。
                第三方starter
                    Apache Cammel
                工具
                    eclipse
                    intellij idea
                    Spring boot CLI
            @SpringBootApplication
                *Application的入口类
                @SpringBootConfiguration
                @EnableAutoConfiguration
                    EnableAutoConfigurationImportSelector.class
                        META-INF/spring.factories
                    AutoConfigurationPackages.Registrar.class
                    spring-boot-autoconfigure-1.xx.jar
                
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
            Spring Boot运行原理
                spring-boot-autoconfigure-xxx.jar
                运作原理
                核心注解
                    @Conditional
                        @ConditionOn
                            Bean
                            Class
                            Expression
                            Java
                            Jndi
                            MissingBean
                            MissingClass
                            NotWebApplication
                            Property
                            Resource
                            SingleCandidate
                            WebApplication
                实例分析
                    CharacterEncodingFilter
                        encoding
                            UTF-8
                        forceEncoding
                            true
        web
            Web开发支持
                org.springframework.boot.autoconfigure.web
                内嵌Servlet
                自动配置http编码
                自动配置上传文件
                自动配置MappingJackson
                Spring Mvc
            Thymeleaf模板引擎
            Web 相关配置
            Tomcat配置
                http转向https
                    P210
            Favicon配置
                favicon.ico
            WebSocket
                @MessageMapping
                @SendTo
            Bootstrap & AngularJS
                bootstrap
                    页面模板
                    css支持
                        布局
                        html
                    页面组件支持
                        各类扩展支持
                AngularJS
                    声明式数据模板+数据绑定
                        类似JSP\Thymeleaf
                        MVW
                        MVVM
                        MVC
                    最简单的AngularJS
                        ng-model
                    纯页面的MVC
                        angular.module
                        $scope
                            ng-controller的范围
                        Event
                            冒泡事件
                                $scope.$emit
                                $scope.$on
                            广播事件
                                $scope.$broadcast
                        $routeProvider
                            .when('/view',{
            controller:'Controller1'
            templateUrl:'view1.html'
})
.when .......
                            <a href="#/view1">
                                定义路由
                        DI
                            Controller中注入scope对象
                                angular.module('firstmodule')
        .controller("",{})
                        Service
                            $location
                            $timeout
                            $rootScope
                        Factory
                            注入调用
                        $http
                            .get(url)
                            .post(url,data)
                            .put(url,data)
                            .delete(url)
                            .head(url)
                        自定义
                            ng-repeat
                            ng-show
                            ng-model
                            子主题 4
                样例
        data数据访问
            JPA
                JpaRepository<Person,Long>
                    定义Interface名称指向查询
                        findBy
                        Like
                        And
                        样例
                            
                    限制结果
                        top或first
                    NamedQuery查询
                        @NamedQuery
                01
                    Hibernate
                        Eclipse Link
                        Open Jpa
                    常规查询
                        JPQL
                    NamedQuery
                        interface 定义的不是按照方法名
                        按照@Entity的@NameQuery设置
                    @Query
                        interface
                            ?1
                            :address
                        @Modify
                        @Transaction
                    Specification
                        JpaSpecificationRepository
                        CriteriaBuilder
                        CriteriaQuery
                        Predicate
                        Root
                        import Static com.uket.spec.Specs.*
                        List <person> people=personRepository.findByAll(personFromHefei())
                        分页排序
                            List
                            Page
                                子主题 1
                    自定义Respository
                        CustomerRespository
                        CustomerRespositoryImpl
                        CustomerJpaRespositoryFactoryBean
                            CustomerJpaRespositoryFactory
                        @EnableJpaRespositories
                PagingAndSortingRepository
                支持
                    jdbc
                        jpa
                            依赖于jdbc
                        spring.datasource
                        @EnableTranstactionManagement
                        schema.sql
                        data.sql
                    默认Hibernate
                        依赖 DataSourceAutoConfiguration
                    SpringDataJpa自动配置
                    Oracle EX
                        限制4G数据
                    定义映射实体类
            其他
                Docker
                    生成脱离虚拟机运行在Linux的 dmg
                        秒级启动
                    未来云计算的趋势paas
                    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,
然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
            Data REST
                Spring Data REST入门(一):两行代码搞定RESTFul
                http://blog.csdn.net/soul_code/article/details/54108105
                Restful
                    增删改查
                定制
                    spring.data.rest.base-path=/api
                    restful 默认实体后加s表示路径
                        persons
                        @RespositoryRestResponse(path="people")
            声明式事务
                PlateformTransactionManager
                    DataSourceTransactionManager
                    JpaTransactionManager
                    HibernateTransactionManager
                @Transactional
                    org.springframework.transaction.annotation
                    @EnabelTransactionManagement
                    参数
                        propagationtion
                            REQUIRED
                        isolation
                            default
                                数据库隔离级别
                        timeout
                        readOnly
                        rollbackfor
                        noRollbackFor
                类级别@Transactional
                Spring Data Jpa 事务
                    simpleJpaRespository
                Spring boot 事务
            数据Cache
                CacheManager
                    SimpleCacheManager
                    ConcurrentMapCacheManager
                    EhcacheCacheManager
                    RedisCacheManager
                声明式缓存@AOP
                    @Cacheable
                    @CachePut
                    @CacheEvict
                    @Caching
                配置
                    spring.cache.type=generic
                Service层支持Cache
                    切换缓存
            非关系型NoSQL
        企业级
            安全控制
            批处理 Spring batch
                处理大量数据的操作框架
                job处理
                    jobRespository
                    jobLauncher
                    job
                    setp
                    ItemReader
                    ItemProcesser
                    ItemWriter
                @EnableBatchProcessing
                数据输出计划任务
            JMS 异步消息
                点对点
                    确保每条消息只有唯一的发送者和接受者
                    topic
                        发送者
                        订阅者
                spring支持
                    @jmsListener
                    @EnableJms
                    spring.activemq.tcp=tcp://localhost:61666
                        activemq
                        安装
                        内嵌
                            org.apache.activemq
                    MessageCreator
                    CommandLiner
                        jsmTemplate.send()
                    @JmsListenser
            系统集成 Spring Integration
                要点
                    Message
                    Channel
                    Message EndPoint
            热部署
            常规部署
            云部署
            boot 测试
        spring Security
            spring security
                Authentication
                    认证
                Authorization
                    授权
            实战
                1、定义XXXInitializer
加载安全过滤器注册(相当于web.xml)
                    继承AbstractSecurityWebApplicationInitializer
                        接口WebApplicationInitiallizer
                        onStartup
                    调用了insertSpringSercurityFilterChain,调用了注册了DelegatingFilterProxy
                    注册一个多过滤器 DelegatingFilterProxy 来实现
                2、@EnableWebSecurity
注册在WebSecurityConfig
认证配置来源、授权范围
                    WebSecurityConfigurerAdapter
                    configure
                        (HttpSecurity http)
请求授权
                    configure
                        (AuthenticationManagerBuilder auth)
用户认证
                            定制登录行为
                    Configure
                        (WebSecurity web)
                3 认证configure
                    (HttpSecurity http)
                        请求授权
                            antMatchers
                                ant风格
                            regexMatchers
                                regex正则表达式
                        anyRequest
                        定制登录行为
                            configure
                                    //登录行为定制的简短代码演示
        http.formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/index")
            .failureUrl("/login?error")
            .permitAll()
            .and()
            .rememberMe()
                .tokenValiditySeconds(1209600) //两周
                .key("uket.cn-springboot-websecurity") //key的名称
            .and()
            .logout()
                .logoutUrl("/custom-logout")
                .logoutSuccessUrl("/logout-success")
                .permitAll();
                    (AuthenticationManagerBuilder auth)
                        内存用户
                            auth.inMemoryAuthentication
                        jdbc用户
                            auth.jdbcAuthentication()
                        通用用户
                            实现
                                UserDetailsService
                            返回
                                User
                                    实现UserDetailService接口
                                    getAuthorities
                                        Returns the authorities granted to the user
                                GrantedAuthority
                                    GrantedAuthority有一个简单实现SimpleGrantedAuthority。
该类只是简单的接收一个表示权限的字符串
                            注册
                                customUserService
                                configure
                                    auth.userDetailsService(customUserService())
                    (WebSecurity web)
        应用监控
            http
            jmx
            ssh
    网站
        样例
        jhipster
            简单来说是一个基于nodejs+yeoman的java代码生成器。
            毫不客气的说 :学会了这套框架,你就是程序开发/程序架构界的潮男。
hipster的意思就是:追求新奇的人。
            angularjs+Spring+hibernate
            往大了说是基于java的一套微服务解决方案。
请注意是一整套的微服务解决方案。
jhipster在整个程序架构上都做好了整合,

包括前端mvvm框架(angularjs)
,前端构建工具(gulp)到后端的微服务框架(spring cloud)和hibernate/mongodb,
再到单元测试/ui测试。
    注解
        Annotation
            JDK1.5
                @Target
                    ElementType.TYPE
                @Retention(RetentionPolicy.RUNTIME)
                @Documented
                @Inherited
                @Import
                @Deprecated
                @interface
                    注解
                @Override
            IOC
                @Component
                @Service
                @Repository
                @Controller
                    @ControllerAdvice
                        http://jinnianshilongnian.iteye.com/blog/1866350
                        加强版的Controller
                            全局放在同一个位置
                        @ExceptionHandler
                        @InitBinder
                        @ModelAttribute
                    @RestController
                        @ResponseBody + @Controller合在一起的作用
                        只是使用@RestController注解Controller,
                        则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
                        例如:本来应该到success.jsp页面的,则其显示success
                    @ResponseBody
                        返回数据内容
                        如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行
                        如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解
                        HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
                        http://snowolf.iteye.com/blog/1628861
                    @RequestBody
                @Bean
                    告诉Spring容器,你可以从下面这个方法中拿到一个Bean
                    随着configuration注入一次单例
                    @Bean(initMethod="init",destroyMethod="destroy") 
                        ==
                            @PostConstruct
            DI
                @Autowired
                    spring
                @Inject
                    jsr-330
                @Resource
                    jsr-250
                可以注解在set方法上或属性
            AOP
                @Action(name=“注解式拦截add操作”))
                @Aspect
                @Component
                @Pointcut(“@annotation(com.uket.cn.aop.Action)”)
                    声明处理的切入点
                    Action
                    http://blog.csdn.net/java18/article/details/7530007
                    http://blog.csdn.net/zmx729618/article/details/51206328
                @After("annotationPointCut()")
                @Before(“execution(*com.wisely.highligt_springg4.DemoMethodService.*(..)*”)
                    直接用拦截规则拦截Method作为参数
                @EnableAspectJAutoProxy
                场景
                    @Transcational
                        @EnableTransactionManagement
                    @Cacheable
                        @EnableCaching
                        @CachePut
                            @CachePut:这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中。
                        @CacheEvict
                            主要针对方法配置,能够根据一定的条件对缓存进行清空
                        @Caching
                    @Log
                    @Aspect
                    @EnableAspectJAutoProxy
            TYPE
                @RequestMapping
                    @Mapping
                    键值信息放入mapping
                @Value 
                    EL资源
                @Param
                @Bean
                @Order
                    Spring中的事务是通过aop来实现的
                    @AspectJ的方法中实现org.springframework.core.Ordered 这个接口来定义order的顺序
order 的值越小,说明越先被执行
                @Scope
            @Conditional
                http://wiselyman.iteye.com/blog/2002449
                Condition
                    matches
                @ConditionOn
                    Bean
                    Class
                        判断类路径中是否存在,且当容器中没有这个Bean的情况下自动配置这个Bean
                        通过非@Component,注入进入容器中
                    Expression
                    Java
                    Jndi
                    MissingBean
                        http://blog.csdn.net/xiaoyu411502/article/details/47905525
                        说明Spring Boot仅仅在当前上下文中不存在Mongo对象时,才会实例化一个Bean。
这个逻辑也体现了Spring Boot的另外一个特性
——自定义的Bean优先于框架的默认配置,
我们如果显式的在业务代码中定义了一个Mongo对象,那么Spring Boot就不再创建。
                    MissingClass
                    NotWebApplication
                    Property
                    Resource
                    SingleCandidate
                    WebApplication
                        
                应用helloMsg
                    @ConfigurationProperties(prefix="spring.http.encoding")
                        自动存取application.properties中的bean值
                    @EnableConfigurationProperties(HttpEncodingProperties.classs)
                    @ConditionOnClass(CharacterEncodingFilter.class)
                        encoding
                            UTF-8
                        forceEncoding
                            true
                    @ConditionalOnProperty (prefix="",value="",matchIfMissing=true)
                        @Autowired
    private HelloServiceProperties hsp;
    
    @Bean
    @ConditionalOnMissingBean(HelloService.class)
    public HelloService helloService(){
        HelloService hs= new HelloService();
        hs.setMsg(hsp.getMsg());
        return hs;
    }
                    注册配置
                        新建META-INF/spring.factories 注册内容
                        maven进行加载
                            @Autowired
                            自动加入形成配置基础文件
            @Profile("dev")
                application-{profile}.properties
                    application.properties
                        spring.profiles.active=prod
                    application-prod.properties
            @ComponentScan
            @EnableAutoConfiguration
                spring.facotry
                @ImportAutoConfiguration
                EnableAutoConfigurationImportSelector
            @EnableWebSecurity
            @EnableJpaRepositories
                JpaConfiguration
                    EntityManagerFactory
                    DataSource
                    PlatformTransactionManager
            @SpringBootApplication
                exclude()
                SpringApplication
                application.properties
                @ImportResource
            @ConfigurationProperties
                prefix
                location
            @NoRepositoryBean
                这样Spring Data Jpa在启动时就不会去实例化BaseRepository这个接口
            JPA
                @NamedQuery
                    @Entity
                    在Entity中定义影射到一个PersonResository的查询语句
                @Query
                    注解在接口的方法上实现查询
                        参数索引?1
                        名称匹配
:address
@Param(“address”)
                        更新
                            @Modify
                            @Query(“update person p set p.name=?1”)
                            @Transaction
                        Criteria
                            继承 JpaSpecificationExecutor<Person>
                            specification
                                Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
                                cb.equal(root.get("address","合肥"))
                            静态导入 PersonRepository
                                import static com.uket.CustomerSpecs.*
                                personRepository.findAll(personFromHefei());
                        排序和分页
                            Sort
                            Page
                            Pageable
                @Entity
                @Id
                @GeneratedValue
                @ManyToMany(cascade = {CascadeType.REFRESH},fetch = FetchType.EAGER)
            Restful
                RepositoryRestMvcConfiguration
                @Import(RepositoryRestMvcconfiguration.class)
                @RestResource
            @Test
                @RunWith
                @SpingApplicationConfiguration
                @WebAppConfiguration
                @Before
    Demo
        注解
            @EnableAspectJAutoProxy
        DI
            @Autowired
        JAVA CONFIG
             @Bean
        Scope
            @Scope("prototype")
        el
            @Value
            @Autowire
Environment environment
        初始化与销毁(构造先执行)
            @Bean
                initMethod
                destoryMethod
            jsr250
                @PostConstruct
                @preDestory
        Profile
            spring.profiles.active
                2.5
                    xml下配置
                3.0
                    implement WebApplicationInitalizar
            @Profile
                编译器进行价值
            context.register(Config.class)
        Application Event
            Observe 模式 消息机制
        Spring Aware
            beanname
                BeanNameAware
                直接获得Bean名字
            ResourceLoader
                ResourceLoaderAware
                获得资源加载器
        taskexecutor 多线程
        taskscheduler 任务调度
        Conditional 条件注解
            根据特定的条件进行Bean的创建行为
            @Conditional注解的内容Matcher内容先执行再创建对象
            程序启动前按照环境指定创建的类,按照 接口进行访问
        annotation
            组合注解照样可以获得Bean
        Enable*
            enable类型
                AspectJ
                Async
                Schedule
                WebMvc
                ConfigurationProperties
                JpaRespository
                TransactionManagerment
                Caching
            源码
                @import
                    直接导入
                条件选择
                    async
                        proxy
                        aspectj
                动态注册
                    ImportBeanDefinitionRegistrar
        fortest
            测试
        1
        2
        3
    查看
        Context内容
            http://blog.csdn.net/jackpk/article/details/46235815
            2.5级以下
                web.xml配置 servlet
            3.0
                无web.xml
        spring-security
        学习
            https://github.com/qibaoguang/Spring-Boot-Reference-Guide
            https://github.com/JeffLi1993/springboot-learning-example
            https://github.com/dyc87112/SpringBoot-Learning
    spring中@Resource注解的应用
         a.先使用字段名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败
 b.如果字段名字没有匹配到Bean则spring会尝试采用字段类型匹配,如果找打bean则注入,如果字段类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个bean的异常.
    分支主题 8
        @RequestMapping(value={"", "/", "index"})
    热加载
        http://www.cnblogs.com/toSeeMyDream/p/6497958.html
    Hibernate Validator
        http://blog.csdn.net/zheng963/article/details/43559951
    JPA
        java persistence api
            api
            查询接口
            O/R关系

共有 人打赏支持
粉丝 0
博文 17
码字总数 12046
×
蔡跃东-即刻行动
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: