<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Spring on Attic.cyn</title><link>https://cyn-blog.pages.dev/tags/spring/</link><description>Recent content in Spring on Attic.cyn</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 01 Nov 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://cyn-blog.pages.dev/tags/spring/index.xml" rel="self" type="application/rss+xml"/><item><title>Spring基础知识</title><link>https://cyn-blog.pages.dev/posts/03.framework/10.spring/springbase/</link><pubDate>Sun, 01 Nov 2020 00:00:00 +0000</pubDate><guid>https://cyn-blog.pages.dev/posts/03.framework/10.spring/springbase/</guid><description>&lt;h2 id="spring基础知识点"&gt;Spring基础知识点&lt;/h2&gt;
&lt;h3 id="beanfactory--applicationcontext-的区别"&gt;BeanFactory ApplicationContext 的区别&lt;/h3&gt;
&lt;p&gt;接口 BeanFactory 和 ApplicationContext 都是用来从容器中获取 Spring beans 的，但是，他们二者有很大不同&lt;/p&gt;
&lt;p&gt;什么是 Spring Bean这是一个非常简单而又很复杂的问题，通常来说，Spring beans 就是被 Spring 容器所管理的 Java 对象，来看一个简单的例子&lt;/p&gt;</description></item><item><title>控制反转</title><link>https://cyn-blog.pages.dev/posts/03.framework/10.spring/ioc/</link><pubDate>Fri, 17 Jul 2020 00:00:00 +0000</pubDate><guid>https://cyn-blog.pages.dev/posts/03.framework/10.spring/ioc/</guid><description>&lt;h2 id="控制反转"&gt;控制反转&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;控制反转&lt;/strong&gt;（Inversion of Control，缩写为&lt;strong&gt;IoC&lt;/strong&gt;），是 &lt;a href="https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Martin_Fowler_(software_engineer)"&gt;Martin Fowler&lt;/a&gt; 教授提出的一种软件设计模式，是&lt;a href="https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B"&gt;面向对象编程&lt;/a&gt;中的一种&lt;strong&gt;设计原则&lt;/strong&gt;，可以用来减低计算机代码之间的&lt;a href="https://baike.baidu.com/item/%E8%80%A6%E5%90%88%E5%BA%A6"&gt;耦合度&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;其中最常见的方式叫做&lt;strong&gt;依赖注入&lt;/strong&gt;（Dependency Injection，简称&lt;strong&gt;DI&lt;/strong&gt;），还有一种方式叫&lt;strong&gt;依赖查找&lt;/strong&gt;(Dependency Lookup）。通俗的来理解，就是本来当需要某个类（构造函数）的某个方法时，自己需要主动实例化变为被动，不需要再考虑如何实例化其他依赖的类，只需要依赖注入 。所谓依赖注入就是由 IoC 容器在运行期间，动态地将某种依赖关系注入到对象之中。所以 IoC 和 DI 是从不同的角度的描述的同一件事情，就是通过引入&lt;strong&gt;IoC 容器&lt;/strong&gt;，利用依赖注入的方式，实现对象之间的解耦。&lt;/p&gt;</description></item><item><title>面向切面编程</title><link>https://cyn-blog.pages.dev/posts/03.framework/10.spring/aop/</link><pubDate>Fri, 17 Jul 2020 00:00:00 +0000</pubDate><guid>https://cyn-blog.pages.dev/posts/03.framework/10.spring/aop/</guid><description>&lt;h2 id="面向切面编程"&gt;面向切面编程&lt;/h2&gt;
&lt;p&gt;在软件业，AOP为Aspect Oriented Programming的缩写，意为：&lt;a href="https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%88%87%E9%9D%A2%E7%BC%96%E7%A8%8B/6016335"&gt;面向切面编程&lt;/a&gt;，可以通过&lt;a href="https://baike.baidu.com/item/%E9%A2%84%E7%BC%96%E8%AF%91"&gt;预编译&lt;/a&gt;方式和运行期动态代理实现在不修改&lt;a href="https://baike.baidu.com/item/%E6%BA%90%E4%BB%A3%E7%A0%81"&gt;源代码&lt;/a&gt;的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续，设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性，AOP可以说也是这种目标的一种实现。&lt;/p&gt;
&lt;h3 id="主要功能"&gt;主要功能&lt;/h3&gt;
&lt;p&gt;日志记录，性能统计，安全控制，事务处理，&lt;a href="https://baike.baidu.com/item/%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86"&gt;异常处理&lt;/a&gt;等等。&lt;/p&gt;
&lt;h3 id="主要意图"&gt;主要意图&lt;/h3&gt;
&lt;p&gt;将日志记录，性能统计，安全控制，事务处理，&lt;a href="https://baike.baidu.com/item/%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86"&gt;异常处理&lt;/a&gt;等代码从业务逻辑代码中划分出来，通过对这些行为的分离，我们希望可以将它们独立到非指导业务逻辑的方法中，进而改变这些行为的时候不影响业务逻辑的代码。&lt;/p&gt;</description></item><item><title>Spring框架常用注解</title><link>https://cyn-blog.pages.dev/posts/03.framework/10.spring/annotation/</link><pubDate>Tue, 23 Jun 2020 00:00:00 +0000</pubDate><guid>https://cyn-blog.pages.dev/posts/03.framework/10.spring/annotation/</guid><description>&lt;h1 id="spring框架常用注解"&gt;Spring框架常用注解&lt;/h1&gt;
&lt;h2 id="import注解--导入资源"&gt;@Import注解 —— 导入资源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;自定义类导入spring容器&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;创建需要导入的类&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CatImport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;启动时手动导入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CatImport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SpringBootApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanBasePackages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;com.cyn.config&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SpringAnnotationApplication&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConfigurableApplicationContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpringApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SpringAnnotationApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CatImport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;catImport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CatImport&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;catImport&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输出&lt;/p&gt;</description></item></channel></rss>