Spring常見的註解及其含義(Spring小結)

你好我是辰兮,很高興你能來閱讀,本篇小結了關於Spring的常見註解,分享給初學者,希望學有所獲,大家一起進步。



一、@Component()

@Repository、@Service、@Controller 和 @Component 將類標識爲Bean

Spring 2.5 中除了提供 @Component 註釋外,還定義了幾個擁有特殊語義的註釋,它們分別是:

@Repository、@Service 和 @Controller。

在目前的 Spring 版本中,這 3 個註釋和 @Component 是等效的,但是從註釋類的命名上,很容易看出這 3 個註釋分別和持久層、業務層和控制層(Web 層)相對應。

雖然目前這3 個註釋和 @Component 相比沒有什麼新意,但 Spring 將在以後的版本中爲它們添加特殊的功能。

所以,如果 Web 應用程序採用了經典的三層分層結構的話,最好在持久層、業務層和控制層分別採用上述註解對分層中的類進行註釋。

  • @Service用於標註業務層組件
  • @Controller用於標註控制層組件(如struts中的action)
  • @Repository用於標註數據訪問組件,即DAO組件
  • @Component泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。

在這裏插入圖片描述


二、@RestController和@Controller的區別

@RestController從Spring 4.0以後產生的,用來將json/xml數據發送到前臺頁面,而不是返回視圖頁面。

  • @RestController註解等價於@ResponseBody + @Controller。
  • @RestController和@Controller的共同點是都用來表示Spring某個類是否可以接收HTTP請求,

二者區別:

  • @RestController無法返回指定頁面,而@Controller可以;
  • 前者可以直接返回數據,後者需要@ResponseBody輔助。

三、@Resource和@Autowired

@Resource的作用相當於@Autowired,

只不過@Autowired按byType自動注入,而@Resource默認按 byName自動注入罷了。

@Resource有兩個屬性是比較重要的,分是name和type,Spring將@Resource註解的name屬性解析爲bean的名字,而type屬性則解析爲bean的類型。所以如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。

如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略。


@Resource裝配順序

  1. 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常
  2. 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常
  3. 如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常
  4. 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退爲一個原始類型進行匹配,如果匹配則自動裝配;
    在這裏插入圖片描述

四、@Data註解 與 lombok

@Data 註解的主要作用是提高代碼的簡潔,使用這個註解可以省去代碼中大量的get()、 set()、 toString()等方法;

  • ps:因爲項目開發過程中你難免會加一個字段,如果加完還要補充get()、 set()方法,重寫 toString()就太麻煩了。

1.引入lombok

要使用 @Data 註解要先引入lombok,lombok 是什麼,它是一個工具類庫,可以用簡單的註解形式來簡化代碼,提高開發效率。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>
@Data
public class Post {

    private Long id;

    private Long postId;

    private Long userId;

    private Integer status;
}

在編譯器中添加插件

這裏以IDEA爲例,在setting的plugin裏搜索lombok plugin,安裝插件。


常用的幾個註解:

  • @Data : 注在類上,提供類的get、set、equals、hashCode、canEqual、toString方法
  • @AllArgsConstructor : 注在類上,提供類的全參構造
  • @NoArgsConstructor : 注在類上,提供類的無參構造
  • @Setter : 注在屬性上,提供 set 方法
  • @Getter : 注在屬性上,提供 get 方法
  • @EqualsAndHashCode : 注在類上,提供對應的 equals 和 hashCode 方法
  • @Log4j/@Slf4j : 注在類上,提供對應的 Logger 對象,變量名爲 log

註解@Slf4j的使用

聲明:如果不想每次都寫private final Logger logger = LoggerFactory.getLogger(當前類名.class); 可以用註解@Slf4j;

 log.error("getHostName error:{}",e);

五、@MapperScan和@Mapper

通過使用@MapperScan可以指定要掃描的Mapper類的包的路徑

添加位置:是在Springboot啓動類上面添加,

@SpringBootApplication
@MapperScan("com.it.dao")
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
    }
}

添加@MapperScan(“com.it.dao”)註解以後,com.it.dao包下面的接口類,在編譯之後都會生成相應的實現類。


@Mapper註解:

作用:在接口類上添加了@Mapper,在編譯之後會生成相應的接口實現類

添加位置:接口類上面

@Mapper
public interface UserDAO {
   //代碼
}

六、@CrossOrigin

@CrossOrigin是用來處理跨域請求的註解


七、@EnableScheduling

springboot使用@EnableScheduling註解進行定時任務

  1. 添加@EnableScheduling註解到入口類聲明上面,如下所示:
@SpringBootApplication
@EnableScheduling
public class SpringbootDemoApplication{
    ...
}
  1. 將@Scheduled添加到不帶參數的方法上,如下所示:
@Component
public class ScheduleTaskService implements IScheduleTaskService {
	
    @Override
    @Scheduled(fixedRate = 6000)
    public void autosync() {
        System.out.print(".");
    }

}

其中@Scheduled註解後面括號裏面可以指定各種參數,在上面代碼裏面的fixedRate = 6000意思是下面的任務每隔6000毫秒,即每隔6秒執行一次。


八、@Bean和@Configuration

@Bean 註解將會告訴 Spring 其修飾的方法將會返回一個對象,該方法要註冊爲 Spring 應用上下文的 bean。

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }

}

@Configuration註解表明這個類是一個配置類。可以啓動組件掃描,用來將帶有@Bean的實體進行實例化bean等

<beans>
    <bean id="transferService" class="com.it.TransferServiceImpl"/>
</beans>

The best investment is to invest in yourself

在這裏插入圖片描述

2020.06.07 記錄辰兮的第79篇博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章