日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring注解开发入门教程

發布時間:2025/3/15 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring注解开发入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注解開發:

什么是驅動注解?

注解啟動時使用注解的形式替代xml配置,將繁雜的spring配置文件從工程中徹底消除掉,簡化書寫

注解驅動的弊端

  • 為了達成注解驅動的目的,可能會將原先很簡單的書寫,變的更加復雜
  • XML中配置第三方開發的資源是很方便的,但使用注解驅動無法在第三方開發的資源中進行編輯,因此會增大開發工作量(但是第三方資源開發中編輯的畢竟比較少,所以注解的優勢依舊大于配置)

啟動注解功能:

啟動注解掃描,加載類中配置的注解項

<context:component-scan base-package="包名"/>

說明:

  • 在進行包所掃描時,會對配置的包及其子包中所有文件進行掃描
  • 掃描過程是以文件夾遞歸迭代的形式進行的
  • 掃描過程僅讀取合法的java文件
  • 掃描時僅讀取spring可識別的注解
  • 掃描結束后會將可識別的有效注解轉化為spring對應的資源加入IoC容器

注意:

  • 無論是注解格式還是XML配置格式,最終都是將資源加載到IoC容器中,差別僅僅是數據讀取方式不同
  • 從加載效率上來說注解優于XML配置文件(注解找到這個類以后直接可以加載,配置文件是先找類然后加載)

bean的定義:

名稱:@Component @Controller @Service @Repository

  • 類型:類注解

  • 位置:類定義上方

  • 作用:設置該類為spring管理的bean

  • 范例:

@Component("userService") public class UserServiceImpl implements UserService {}

說明:

@Controller(表現層)、@Service (業務層)、@Repository(dao)是@Component的衍生注解,功能同@Component,對應三層架構,寫哪個都是一樣的

相關屬性:

value:默認會加上value,定義時不需要寫,只要寫bean的訪問id即可

bean的作用域:

  • 名稱:@Scope

  • 類型:類注解

  • 位置:類定義上方

  • 作用:設置該類作為bean對應的scope屬性

  • 范例:

@Scope @Component("userService") public class UserServiceImpl implements UserService {}

相關屬性

value(默認):定義bean的作用域,默認為singleton

bean的生命周期:

  • 名稱:@PostConstruct、@PreDestroy

  • 類型:方法注解

  • 位置:方法定義上方

  • 作用:設置該類作為bean對應的生命周期方法

  • 范例:

@PostConstructpublic void init() {System.out.println("user service init...");}@PreDestroypublic void destroy() {System.out.println("user service destroy...");}

加載第三方資源:

  • 名稱:@Bean

  • 類型:方法注解

  • 位置:方法定義上方

  • 作用:設置該方法的返回值作為spring管理的bean

  • 范例:

@Component public class JDBCConfig {@Bean("dataSource")public static DruidDataSource getDataSource() {DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jdbc.Druid");ds.setUrl("jdbc:mysql://localhost:3306/db2");ds.setUsername("你的用戶名");ds.setPassword("你的密碼");return ds;} }
  • 說明:

    • 因為第三方bean無法在其源碼上進行修改,使用@Bean解決第三方bean的引入問題

    • 該注解用于替代XML配置中的靜態工廠與實例工廠創建bean,不區分方法是否為靜態或非靜態

    • @Bean所在的類必須被spring掃描加載,否則該注解無法生效

相關屬性:

value(默認):定義bean的訪問id

bean的非引用類型屬性注入:

  • 名稱:@Value

  • 類型:屬性注解、方法注解

  • 位置:屬性定義上方,方法定義上方

  • 作用:設置對應屬性的值或對方法進行傳參

  • 范例:

@Component("userDao") public class UserDaoImpl implements UserDao {@Value("${jdbc.username}")private String username;private int num;@Value("1")private String version;// 這個書寫方式可以讀取properties文件,也可以直接寫在set方法上,但是寫了value的話set方法就可以省略了@Value("1")public void setNum(int num) {this.num = num;} }
  • 說明:

    • value值僅支持非引用類型數據,賦值時對方法的所有參數全部賦值

    • value值支持讀取properties文件中的屬性值,通過類屬性將properties中數據傳入類中

    • value值支持SpEL

    • @value注解如果添加在屬性上方,可以省略set方法(set方法的目的是為屬性賦值)

相關屬性:

value(默認):定義對應的屬性值或參數值

bean的引用類型屬性注入:

  • 名稱:@Autowired、@Qualifier

  • 類型:屬性注解、方法注解

  • 位置:屬性定義上方,方法定義上方

  • 作用:設置對應屬性的對象或對方法進行引用類型傳參

  • 范例:

@Autowired(required = false) @Qualifier("userDao") private UserDao userDao;
  • 說明:

    • @Autowired默認按類型自動裝配
    • @Qualifier后可以指定自動裝配的bean的id(比如有userDao1、userDao2,可以指定名稱加載)
  • 相關屬性

    • required:定義該屬性是否允許為null

bean的引用類型屬性注入:

  • 名稱:@Primary

  • 類型:類注解

  • 位置:類定義上方

  • 作用:設置類對應的bean按類型裝配時優先裝配

  • 范例:

@Component @Primary public class ClassName{}

說明:

@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文件中的屬性值

  • 范例:

@PropertySource(value = "classpath:jdbc.properties") // 如果有都個文件可以使用數組加載,加大括號,配置文件之間用逗號隔開 @PropertySource(value = {"classpath:jdbc.properties","classpath:jdbc2.properties"},ignoreResourceNotFound = true) public class ClassName {@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password; }

說明:

不支持*通配格式,一旦加載,所有spring控制的bean中均可使用對應屬性值

相關屬性:

  • value(默認):設置加載的properties文件名

  • ignoreResourceNotFound:如果資源未找到,是否忽略,默認為false

純注解格式:

  • 名稱:@Configuration、@ComponentScan

  • 類型:類注解

  • 位置:類定義上方

  • 作用:設置當前類為spring核心配置加載類

  • 范例:

@Configuration // 代替spring的配置文件 @ComponentScan("com.itzhuzhu") // 代替xml配置文件的包掃描 <context:component-scan base-package="com.itzhuzhu"/> public class SpringConfig{ }

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控制的資源

  • 范例:

@Configuration @Import(JDBCConfig.class) //Import只能有一個,這里是演示加載多個配置文件 @Import({JDBCConfig.class,JDBCConfig2.class}) public class ClassName { } // spring類配置加載后,在JDBCConfig就不需要寫@Component public class JDBCConfig {@Bean("dataSource")public static DruidDataSource getDataSource() {DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jdbc.Druid");ds.setUrl("jdbc:mysql://localhost:3306/db2");ds.setUsername("你的用戶名");ds.setPassword("你的密碼");return ds;} }
  • 說明:

    • @Import注解在同一個類上,僅允許添加一次,如果需要導入多個,使用數組的形式進行設定,加大括號,用逗號隔開

    • 在被導入的類中可以繼續使用@Import導入其他資源

    • @Bean所在的類可以使用導入的形式進入spring容器,無需聲明為bean

bean加載控制:

@DependsOn

  • 名稱:@DependsOn

  • 類型:類注解、方法注解

  • 位置:bean定義的位置(類上或方法上)

  • 作用:控制bean的加載順序,使其在指定bean加載完畢后再加載

  • 范例:

@Component("userDao") @DependsOn("userService")// 表示userDao依賴userService,會先加載userService再加載userDao public class UserDaoImpl { }
  • 說明:

    • 配置在方法上,使@DependsOn指定的bean優先于@Bean配置的bean進行加載

    • 配置在類上,使@DependsOn指定的bean優先于當前類中所有@Bean配置的bean進行加載

    • 配置在類上,使@DependsOn指定的bean優先于@Component等配置的bean進行加載

相關屬性

  • value(默認):設置當前bean所依賴的bean的id

應用場景:

  • 聊天通信:先啟動發消息再啟動接收消息,用于bean的加載順序控制

  • 雙11活動期間:零點前是結算策略A,零點后是結算策略B,策略B操作的數據為促銷數據。策略B加載順序與促銷數據的加載順序

@Order

  • 名稱:@Order

  • 類型:配置類注解

  • 位置:配置類定義的位置(類上)

  • 作用:控制配置類的加載順序

  • 范例:

@Order(1) public class SpringConfig { }

應用場景:

  • 多個種類的配置出現后,優先加載系統級的,然后加載業務級的,避免細粒度的加載控制

@Lazy

  • 名稱:@Lazy

  • 類型:類注解、方法注解

  • 位置:bean定義的位置(類上或方法上)

  • 作用:控制bean的加載時機,使其延遲加載

  • 范例:

@Order(1) public class SpringConfigClassName { }

應用場景:

  • 程序災難出現后對應的應急預案處理是啟動容器時加載時機

總結

以上是生活随笔為你收集整理的Spring注解开发入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。