你好我是辰兮,很高興你能來閱讀,本篇小結了關於Spring的常見註解,分享給初學者,希望學有所獲,大家一起進步。
1.JAVA基礎面試常考問題
: JAVA面試基礎常考題彙集2.JAVA面試SSM框架常考
:JAVA框架面試題彙集
文章目錄
一、@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裝配順序
- 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常
- 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常
- 如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常
- 如果既沒有指定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註解進行定時任務
- 添加@EnableScheduling註解到入口類聲明上面,如下所示:
@SpringBootApplication
@EnableScheduling
public class SpringbootDemoApplication{
...
}
- 將@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篇博客