- @Import註解作用是什麼
通過導入的方式將Bean加入SpringIoc容器中。 - @Import註解源碼解析
package org.springframework.context.annotation;
import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import
{
Class<?>[] value();
}
@Import註解中有一個@Target註解表明它只能作用在類、接口、枚舉類上,@Retention註解說明註解可以保留到程序運行的時候,它會被加載進JVM中去。
- @Import註解使用示例
創建一個Cat POJO類
package com.eureka.client.co;
public class Cat {
private String catName;
private int age;
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在主類中加入@Import註解
package com.eureka.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.web.client.RestTemplate;
import com.eureka.client.co.Cat;
@EnableCircuitBreaker
@EnableEurekaClient
@SpringBootApplication
@Import(Cat.class)
public class EurekaClientApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(EurekaClientApplication.class, args);
Cat cat = context.getBean(Cat.class);
System.out.println(cat);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
輸出結果是:
com.eureka.client.co.Cat@4fd80300