javascript
Spring注解开发入门教程
注解開發:
什么是驅動注解?
注解啟動時使用注解的形式替代xml配置,將繁雜的spring配置文件從工程中徹底消除掉,簡化書寫
注解驅動的弊端
- 為了達成注解驅動的目的,可能會將原先很簡單的書寫,變的更加復雜
- XML中配置第三方開發的資源是很方便的,但使用注解驅動無法在第三方開發的資源中進行編輯,因此會增大開發工作量(但是第三方資源開發中編輯的畢竟比較少,所以注解的優勢依舊大于配置)
啟動注解功能:
啟動注解掃描,加載類中配置的注解項
<context:component-scan base-package="包名"/>說明:
- 在進行包所掃描時,會對配置的包及其子包中所有文件進行掃描
- 掃描過程是以文件夾遞歸迭代的形式進行的
- 掃描過程僅讀取合法的java文件
- 掃描時僅讀取spring可識別的注解
- 掃描結束后會將可識別的有效注解轉化為spring對應的資源加入IoC容器
注意:
- 無論是注解格式還是XML配置格式,最終都是將資源加載到IoC容器中,差別僅僅是數據讀取方式不同
- 從加載效率上來說注解優于XML配置文件(注解找到這個類以后直接可以加載,配置文件是先找類然后加載)
bean的定義:
名稱:@Component @Controller @Service @Repository
-
類型:類注解
-
位置:類定義上方
-
作用:設置該類為spring管理的bean
-
范例:
說明:
@Controller(表現層)、@Service (業務層)、@Repository(dao)是@Component的衍生注解,功能同@Component,對應三層架構,寫哪個都是一樣的
相關屬性:
value:默認會加上value,定義時不需要寫,只要寫bean的訪問id即可
bean的作用域:
-
名稱:@Scope
-
類型:類注解
-
位置:類定義上方
-
作用:設置該類作為bean對應的scope屬性
-
范例:
相關屬性
value(默認):定義bean的作用域,默認為singleton
bean的生命周期:
-
名稱:@PostConstruct、@PreDestroy
-
類型:方法注解
-
位置:方法定義上方
-
作用:設置該類作為bean對應的生命周期方法
-
范例:
加載第三方資源:
-
名稱:@Bean
-
類型:方法注解
-
位置:方法定義上方
-
作用:設置該方法的返回值作為spring管理的bean
-
范例:
-
說明:
-
因為第三方bean無法在其源碼上進行修改,使用@Bean解決第三方bean的引入問題
-
該注解用于替代XML配置中的靜態工廠與實例工廠創建bean,不區分方法是否為靜態或非靜態
-
@Bean所在的類必須被spring掃描加載,否則該注解無法生效
-
相關屬性:
value(默認):定義bean的訪問id
bean的非引用類型屬性注入:
-
名稱:@Value
-
類型:屬性注解、方法注解
-
位置:屬性定義上方,方法定義上方
-
作用:設置對應屬性的值或對方法進行傳參
-
范例:
-
說明:
-
value值僅支持非引用類型數據,賦值時對方法的所有參數全部賦值
-
value值支持讀取properties文件中的屬性值,通過類屬性將properties中數據傳入類中
-
value值支持SpEL
-
@value注解如果添加在屬性上方,可以省略set方法(set方法的目的是為屬性賦值)
-
相關屬性:
value(默認):定義對應的屬性值或參數值
bean的引用類型屬性注入:
-
名稱:@Autowired、@Qualifier
-
類型:屬性注解、方法注解
-
位置:屬性定義上方,方法定義上方
-
作用:設置對應屬性的對象或對方法進行引用類型傳參
-
范例:
-
說明:
- @Autowired默認按類型自動裝配
- @Qualifier后可以指定自動裝配的bean的id(比如有userDao1、userDao2,可以指定名稱加載)
-
相關屬性
- required:定義該屬性是否允許為null
bean的引用類型屬性注入:
-
名稱:@Primary
-
類型:類注解
-
位置:類定義上方
-
作用:設置類對應的bean按類型裝配時優先裝配
-
范例:
說明:
@Autowired默認按類型裝配,當出現相同類型的bean,使用@Primary提高按類型自動裝配的優先級,多個@Primary會導致優先級設置無效
例:比如有userDao1、userDao2類,但是兩個類的@Component都沒寫id,配置加載的是userDao,這個時候會報錯說匹配不到,就可以在類上加@Primary,加在哪個類,哪個類優先加載
bean的引用類型屬性注入:
-
名稱:@Inject、@Named、@Resource
-
說明:
- @Inject與@Named是JSR330規范中的注解,功能與@Autowired和@Qualifier完全相同,適用于不同架構場景
- @Resource是JSR250規范中的注解,可以簡化書寫格式,說白了就是把@Autowired、@Qualifier合并成@Resource
-
@Resource相關屬性
-
name:設置注入的bean的id(就是@Autowired)
-
type:設置注入的bean的類型,接收的參數為Class類型(就是@Qualifier)
-
加載properties文件:
-
名稱:@PropertySource
-
類型:類注解
-
位置:類定義上方
-
作用:加載properties文件中的屬性值
-
范例:
說明:
不支持*通配格式,一旦加載,所有spring控制的bean中均可使用對應屬性值
相關屬性:
-
value(默認):設置加載的properties文件名
-
ignoreResourceNotFound:如果資源未找到,是否忽略,默認為false
純注解格式:
-
名稱:@Configuration、@ComponentScan
-
類型:類注解
-
位置:類定義上方
-
作用:設置當前類為spring核心配置加載類
-
范例:
AnnotationConfigApplicationContext
加載純注解格式上下文對象,需要使用AnnotationConfigApplicationContext加載配置
public static void main(String[] args) {// ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");// 加載配置類的字節碼AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);UserService userService = (UserService) ctx.getBean("userService");UserDao userDao = (UserDao) ctx.getBean("userDao");BookDao bookDao = (BookDao) ctx.getBean("bookDao");userService.save();userDao.save();bookDao.save();}說明:
-
核心配合類用于替換spring核心配置文件,此類可以設置空的,不設置變量與屬性
-
bean掃描工作使用注解@ComponentScan替代
第三方bean配置與管理:
-
名稱:@Import
-
類型:類注解
-
位置:類定義上方
-
作用:導入第三方bean作為spring控制的資源
-
范例:
-
說明:
-
@Import注解在同一個類上,僅允許添加一次,如果需要導入多個,使用數組的形式進行設定,加大括號,用逗號隔開
-
在被導入的類中可以繼續使用@Import導入其他資源
-
@Bean所在的類可以使用導入的形式進入spring容器,無需聲明為bean
-
bean加載控制:
@DependsOn
-
名稱:@DependsOn
-
類型:類注解、方法注解
-
位置:bean定義的位置(類上或方法上)
-
作用:控制bean的加載順序,使其在指定bean加載完畢后再加載
-
范例:
-
說明:
-
配置在方法上,使@DependsOn指定的bean優先于@Bean配置的bean進行加載
-
配置在類上,使@DependsOn指定的bean優先于當前類中所有@Bean配置的bean進行加載
-
配置在類上,使@DependsOn指定的bean優先于@Component等配置的bean進行加載
-
相關屬性
- value(默認):設置當前bean所依賴的bean的id
應用場景:
-
聊天通信:先啟動發消息再啟動接收消息,用于bean的加載順序控制
-
雙11活動期間:零點前是結算策略A,零點后是結算策略B,策略B操作的數據為促銷數據。策略B加載順序與促銷數據的加載順序
@Order
-
名稱:@Order
-
類型:配置類注解
-
位置:配置類定義的位置(類上)
-
作用:控制配置類的加載順序
-
范例:
應用場景:
- 多個種類的配置出現后,優先加載系統級的,然后加載業務級的,避免細粒度的加載控制
@Lazy
-
名稱:@Lazy
-
類型:類注解、方法注解
-
位置:bean定義的位置(類上或方法上)
-
作用:控制bean的加載時機,使其延遲加載
-
范例:
應用場景:
- 程序災難出現后對應的應急預案處理是啟動容器時加載時機
總結
以上是生活随笔為你收集整理的Spring注解开发入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC响应使用案例(带数据页
- 下一篇: gradle idea java ssm