美文网首页我爱编程
spring实战笔记

spring实战笔记

作者: Mrryo | 来源:发表于2018-08-08 23:09 被阅读0次

    >Bean装配

    1、sring容器实现:主要两种bean工厂(比较低级)、应用上下文(ApplicationContext)

    3、spring包分为:

    4、装配bean的方式:

    a.注解自动化装配(先用@ComponentScan开启组建扫描,然后用@Component、@Controller、@Service、@Repository等标注组件,最后用@Autowired、@Resource申明装配);

    b.JavaConfig装配(先用@Configuration标识为配置类,然后用@Bean标明bean实例);

    c.xml装配(先在xml中申明<beans>,然后申明<bean><constructor-arg ref="beanid"></bean>(构造器注入,有参数)或者<bean><property></property></bean> (set注入,无参数,有set方法))

    5、spring DI:依赖注入:3种:构造方法注入,setter注入,基于注解的注入(byName,byType)。默认注入都是单例

    6、profile配置多环境:可以用@Profile/xml中<bean profile='dev'>申明;再通过配置文件中:spring.profiles.active=dev/test设置具体环境。

    7、spring作用域:创建bean有以下:

    单例(Singleton):在整个应用中,只创建bean的一个实例(spring默认的作用域)。 

    原型(Prototype):每次注入或者通过Spring应用上下文获取的 时候,都会创建一个新的bean实例。(@Scope("prototype")申明) 

    会话(Session):在Web应用中,为每个会话创建一个bean实 例。 

    请求(Rquest):在Web应用中,为每个请求创建一个bean实 例。

    8、spring 代理:a.静态代理(需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类);

    b.动态代理(jdk代理/接口代理:实现newProxyInstance(ClassLoader loader, Class[] interfaces,InvocationHandler h ),内存中生成对象,代理对象不需要实现接口,但是目标对象一定要实现接口);

    c.Cglib代理(基于继承的方式实现,不需要对象实现接口,在运行期扩展java类与实现java接口,目标对象不能final/static,代理类需实现MethodInterceptor接口或者MethodInterceptor中的intercept()方法)

    xml中<aop:aspectj-autoproxy proxy-target-class='true'>开启cglib代理

    >Aop切面

    9.0、AOP有三种植入切面的方法:编译期织入(Aspect);类装载期织入(AspectJ);动态代理织入(jdk、Cglib需要实现InvocationHandler 接口)

    9.1、@Aspect 定义pojo/切面;@Piontcut("execution(** 自定义注解(..))")定义切点,@Before、@After、@Around、@AfterReturning、@AfterThrowing定义通知;需要java启动AspectJ代理(<aop:aspectj-autoproxy>或者@EnableAspectJAutoProxy)。

    xml方式配置为:

    10、@DeclareParents:为对象新增方法。

    ->spring webmvc

    11、spring web一个请求的过程:

    启动DispatcherServlet(加载web组件的bean),会创建spring应用上下文,同时启动ContextLoaderListener(加载应用其他bean),创建上下文。启动的Spring MVC组件(配置试图模型:InternalResourceViewResolver)。

    12、springweb 前台视图/引擎:jsp、Thymeleaf、FreeMarker

    13、web容器启动时先提供了一个全局ServletContext上下文,然后contextLoaderListener监听容器初始化事件,contextInitialized()被调用,这方法会让spring启动一个WebApplicationContext根上下文(==IOC容器),放入到ServletContext,然后初始化web.xml中的servlet,例如:DispatcherServlet(建立自己的上下文,互不影响,同时共有跟上下文)。

    ->spring security

    14、基于Servlet Filter提供安全

    DelegatingFilterProxy 过滤器会拦截请求,委托给ID为springSecurityFilterChain的 bean。xml配置如下:

    后台配置如下:

    用户验证可以基于内存(inMemoryAuthentication())、数据库(jdbcAuthentication())、LDAP(ldapAuthentication())、自定义的用户服务 (实现UserDetailsService接口的现loadUserByUsername()方法)、基于表单认证formLogin()、开启httpBasic()认证、开启记住我rememberMe()、退出logout()

    @RolesAllowed/@Secured(“具体权限”):能控制方法被哪个权限访问。@PreAuthorize/@PostAuthorize(除了支持具体角色还能支持SpEL)。@PreFilter(过滤方法)

    ->spring 数据库

    15、jpa:springdata -jpa @Query(支持sql)

    16、mongodb:@Query(支持json)

    17、redis:a.Jedis客户端整合(JedisPool);spring-data-redis整合(RedisTemplate);序列化常用方式:StringRedisSerializer(简单的字符串序列化)、JdkSerializationRedisSerializer(序列化java对象,需实现Serializable接口)、JacksonJsonRedisSerializer(序列化object对象为json字符串)

    ->缓存

    18、xml配置启用缓存:@Cacheable(“value”)如果缓存中有值就返回值,没有就插入;@CachePut,直接插入缓存;@CacheEvict,清除缓存

    缓存的几种选择:Ehcache缓存(基于内存,并发不高,页面缓存时可以用);RedisCacheManager

    ->RPC(远程过程调用)

    19、实现rpc的框架:RMI(JRMP协议承载数据,提供的服务需实现Remote ,缺点:对防火墙不友好,不关注双方的通信,只支持java和序列化)

    Hessian(消息二进制,实现类需继承HessianServlet 接口,而且私有序列化)。Burlap(实现类继承BurlapServlet接口,消息xml)都基于http,不支持复杂序列化。

    spring http invoker(只支持java,基于http。可用于复杂序列化)

    dubbo:使用Hessian的序列化协议,传输则是TCP协议,使用了高性能的NIO框架Netty。

    发布webservice可用技术:JAX-WS(@WebService),cxf。

    调用restful服务的技术: RestTemplate可以访问restful服务;Feign;ribbon;Http Client;

    ->消息

    20、异步消息:JMS :a.点对点模式(队列queue)。b.发布订阅模式(主题topic)。只支持java

    JMS api发送接受消息(用jmsoperation(jmstemplate实现的接口))。send()发送,receive()接受(是一个同步接受,会阻塞,可用消息监听器代替)。

    AMQP协议:跨平台/语言

    其中Exchange有四种:

    ->websocket

    21、@OnOpen(连接时触发);@OnClose(关闭时触发);@OnMessage(收到消息触发)

    SockJS(浏览器不支持websocket时可选技术)  STOMP协议()

    JavaMail(发送邮件)

    ->JMX管理bean

    22、一个进程可有多个mBeanServer,都是独立容器。用来管理MBean,下图时把bean变为Mbean:

    ->spring boot

    23、spring-boot-starter(集成了很多包);自动装配;spring-boot-actuator(包含了很多监控)

    参考:https://blog.csdn.net/letempsar/article/details/52565020;https://www.cnblogs.com/roy-blog/p/7211761.html

    相关文章

      网友评论

        本文标题:spring实战笔记

        本文链接:https://www.haomeiwen.com/subject/wrnqvftx.html