摘要:目前只是一個后臺模塊,希望自己技能增強到一定時,可以把的融合進來。目錄第一站,分析了啟動類。看見沒,這個也是配置類,它聲明了視圖解析器地域解析器以及靜態資源的位置,想起來沒,就是前置,后置。程序啟動類我們點擊源碼看看。
Guns基于SpringBoot,致力于做更簡潔的后臺管理系統,完美整合springmvc + shiro + 分頁插件PageHelper + 通用Mapper + beetl!Guns項目代碼簡潔,注釋豐富,上手容易,同時Guns包含許多基礎模塊(用戶管理,角色管理,部門管理,字典管理等10個模塊),可以直接作為一個后臺管理系統的腳手架.
說明如果您有幸能看到,請認閱讀以下內容;
1、本項目臨摹自abel533的Guns,他的項目 fork 自 stylefeng 的 Guns!開源的世界真好,可以學到很多知識。
2、版權歸原作者所有,自己只是學習使用。跟著大佬的思路,希望自己也能變成大佬。gogogo》。。
3、目前只是一個后臺模塊,希望自己技能增強到一定時,可以把stylefeng 的 [Guns]融合進來。
4、很多總結的文檔都來自abel533的GiHub的README.md.為了方便自己復習就拿來主義了。
5、note里面是自己的學習過程,菜鳥寫的,不是大佬寫的。內容都是大佬的。
目錄1、SpringBoot第一站,分析了啟動類。還有各種自動配置的源碼點這里
2、
修改說明本項目對 Guns 的改動為:
1、將 mybatis-plus 改成了通用 Mapper.
2、增加分頁插件 PageHelper.
3、去掉com.stylefeng.guns.modular.system.dao包中的所有DAO,將方法放到對應的Mapper接口中.
4、將 Mapper.xml 移動到 resources 中
關于兩者的對比,可以通過 commit 信息查看。
功能簡介1、用戶管理
2、角色管理
3、部門管理
4、菜單管理
5、字典管理
6、業務日志
7、登錄日志
8、監控管理
9、通知管理
10、代碼生成
1、首先我們來看包結構,老樣子,我們先從core包開始,然后common,在config。等等,還是先從啟動類開始吧。
項目包結構說明├─main │ │ │ ├─java │ │ │ │ │ ├─com.guo.guns----------------項目主代碼(原來的包:com.stylefeng.guns) │ │ │ │ │ │ │ ├─common----------------項目公用的部分(業務中經常調用的類,例如常量,異常,實體,注解,分頁類,節點類) │ │ │ │ │ │ │ ├─config----------------項目配置代碼(例如mybtais-plus配置,ehcache配置等) │ │ │ │ │ │ │ ├─core----------------項目運行的核心依靠(例如aop日志記錄,攔截器,監聽器,guns模板引擎,shiro權限檢查等) │ │ │ │ │ │ │ ├─modular----------------項目業務代碼 │ │ │ │ │ │ │ ├─GunsApplication類----------------以main方法啟動springboot的類 │ │ │ │ │ │ │ └─GunsServletInitializer類----------------用servlet容器啟動springboot的核心類 │ │ │ │ │ └─generator----------------mybatis-plus Entity生成器 │ │ │ ├─resources----------------項目資源文件 │ │ │ │ │ ├─gunsTemplate----------------guns代碼生成模板 │ │ │ │ │ ├─application.yml----------------springboot項目配置 │ │ │ │ │ └─ehcache.xml----------------ehcache緩存配置 │ │ │ └─webapp----------------web頁面和靜態資源存放的目錄 │
注:SpringBoot項目默認不支持將靜態資源和模板(web頁面)放到webapp目錄,但是個人感覺resources目錄只放項目的配置更加簡潔,所以就將web頁面繼續放到webapp目錄了.
1、先來看啟動類:
/** * SpringBoot方式啟動類 */ @SpringBootApplication public class GunsApplication extends WebMvcConfigurerAdapter { protected final static Logger logger = LoggerFactory.getLogger(GunsApplication.class); public static void main(String[] args) { SpringApplication.run(GunsApplication.class,args); logger.info("GunsApplication is success!"); } }
需要注意兩個點:@SpringBootApplication注解和WebMvcConfigurerAdapter
(1)、1.2版本應該是@Configuretion注解,這個注解表明這個類會處理Spring的常規bean。來自《精通Spring MVC》
(2)、@ComponentScana 它會告訴Spring去哪里查找SPring組件(服務,控制器),大白話就是bean那。一般我們在控制層的類上會加上@Controller注解,不知道大家有木有配置過XML,難受啊。
(3)、@EnableAutoConfiguration : 看名字,AutoConfiguration啊,這就是Spring魔力所在,省去很多XXML了,在這里是基于JavaConfig配置的。
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication { Class>[] scanBasePackageClasses() default {}; } ------------------------------------------------------- @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
2、接下來,我們再看下為毛要繼承WebMvcConfigrerApapter類。
看見Config沒,這個也是配置類,它聲明了視圖解析器、地域解析器、以及靜態資源的位置,(想起來沒,就是前置,后置)
。
先看一段源碼 ————源碼是個好東西
----------------------InternalResourceViewResolver熟悉嗎?----------------------- @Bean @ConditionalOnMissingBean public InternalResourceViewResolver defaultViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix(this.mvcProperties.getView().getPrefix()); resolver.setSuffix(this.mvcProperties.getView().getSuffix()); return resolver; } ---------------------------也是視圖解析器,只是返回的是bean------------------------- @Bean @ConditionalOnBean({View.class}) @ConditionalOnMissingBean public BeanNameViewResolver beanNameViewResolver() { BeanNameViewResolver resolver = new BeanNameViewResolver(); resolver.setOrder(2147483637); return resolver; } -------------------------------地域解析器-------------------------------------------- @Bean @ConditionalOnMissingBean @ConditionalOnProperty( prefix = "spring.mvc", name = {"locale"} ) public LocaleResolver localeResolver() { if(this.mvcProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.WebMvcProperties.LocaleResolver.FIXED) { return new FixedLocaleResolver(this.mvcProperties.getLocale()); } else { AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver(); localeResolver.setDefaultLocale(this.mvcProperties.getLocale()); return localeResolver; } }
說了這么多,我們先來看看SpringMVC啟動流程,知其所以然的同時也要知其然。
一般來說,初始化 步驟如下:
1、初始化SpringMVC的DispatcherServlet
2、配置轉碼過濾器(UTF-8,亂碼鍋就在設置,還有一個就是在發送信息前,setCharacterEncoding()。),保證能正確轉碼,為啥啊,因為瀏覽器發送的是ISO-8859?。
3、配置視圖解析器,就上面說的那個,返回視圖的時候方便定位。
4、配置靜態資源的位置,
5、還有就是配置multipart解析器,主要是為了能上傳文件,part單詞什么意思?多個-部分
6、還需要寫錯誤頁面,統一異常處理。
然而,然而有了SpringBoot,統統可以省略,激動嗎?興奮嗎? 我是蠻激動的,尤其第一次運行SpringBoot項目。
上面已經幫我們位置了視圖解析器,接下來我們看下DispatcherServlet和multipart
@AutoConfigureOrder(-2147483648) @Configuration @ConditionalOnWebApplication @ConditionalOnClass({DispatcherServlet.class}) //只有對應的類在classpath中有存在時才會注入 @AutoConfigureAfter({EmbeddedServletContainerAutoConfiguration.class}) public class DispatcherServletAutoConfiguration { public static final String DEFAULT_DISPATCHER_SERVLET_BEAN_NAME = "dispatcherServlet"; //熟悉嗎?DeFAULT,默認的那。 public static final String DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME = "dispatcherServletRegistration"; public DispatcherServletAutoConfiguration() { } -------------------------------MultipartResolver------------------------------- @Bean @ConditionalOnBean({MultipartResolver.class}) @ConditionalOnMissingBean( name = {"multipartResolver"} ) public MultipartResolver multipartResolver(MultipartResolver resolver) { return resolver; } }
還有還有,錯誤配置、轉碼配置、tomcat配置Jetty等等。具體的在這個配置類中EmbeddedServletContainerAutoConfiguration,只看ContainerAutofig。我們還是正式進入項目吧。
/** * Guns Web程序啟動類 */ public class GunsServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(GunsApplication.class); } }
我們點擊源碼看看SpringBootServletInitializer。其實看名字就可看出是Servlet初始化,熟悉設這個ApplicationContext單詞嗎?應用上下文。很重要的,還有一個叫做BeanFactory,主要有個getBean方法,一般用前者。不懂的可以去看看我臨摹別人的簡單版Spring框架點這里
public abstract class SpringBootServletInitializer implements WebApplicationInitializer { protected WebApplicationContext createRootApplicationContext(ServletContext servletContext) {} protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder; } }
今晚就先到這里吧,明早gogogo
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68657.html
摘要:因為抽象類天生就是用來被繼承的。由于不支多繼承,子類不能夠繼承多個類,但可以實現多個接口如果基本功能在不斷改變,那么就需要使用抽象類。全局異常處理接下來,我們在看看控制統一的異常攔截機制。 3、Spring Boot 緩存配置、全局異常處理 說明 如果您有幸能看到,請認閱讀以下內容; 1、本項目臨摹自abel533的Guns,他的項目 fork 自 stylefeng 的 Guns!...
摘要:序列化的類可顯式聲明的值,這個中定義異常和中定義方式幾乎一樣。工具類初始化是為每個序列化類產生的版本標識,可用來保證在反序列時,發送方發送的和接受方接收的是可兼容的對象。 common.exception、annotation、node、page 說明 如果您有幸能看到,請認閱讀以下內容; 1、本項目臨摹自abel533的Guns,他的項目 fork 自 stylefeng 的 Gu...
摘要:總體介紹在互聯網金融行業一百多億其實也算不上大平臺,也就是二級陣營吧,其實每次的架構升級都是隨著業務重大推進而伴隨的,在前一代系統架構上遇到的問題,業務開發過程中積累一些優秀的開發案例,在下一代系統開發中就會大力推進架構升級。 回想起從公司成立敲出的第一行代碼算起到現在也快三年了,平臺的技術架構,技術體系也算是經歷了四次比較重大的升級轉化(目前第四代架構體系正在進行中),臨近年底也想抽...
摘要:總體介紹在互聯網金融行業一百多億其實也算不上大平臺,也就是二級陣營吧,其實每次的架構升級都是隨著業務重大推進而伴隨的,在前一代系統架構上遇到的問題,業務開發過程中積累一些優秀的開發案例,在下一代系統開發中就會大力推進架構升級。 回想起從公司成立敲出的第一行代碼算起到現在也快三年了,平臺的技術架構,技術體系也算是經歷了四次比較重大的升級轉化(目前第四代架構體系正在進行中),臨近年底也想抽...
閱讀 1428·2023-04-25 19:51
閱讀 1923·2019-08-30 15:55
閱讀 1737·2019-08-30 15:44
閱讀 2697·2019-08-30 13:58
閱讀 2689·2019-08-29 16:37
閱讀 1069·2019-08-29 15:34
閱讀 3989·2019-08-29 11:05
閱讀 2618·2019-08-28 17:51