>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