一個在方法上加上了@cacheable 注解以后,會在第一次執行的時候講value放入緩存中,當以后有相同參數的請求再次進入時,會直接從緩存中獲取值,而不會執行方法。
@Cacheable可以標記在一個方法上,也可以標記在一個類上。當標記在一個方法上時表示該方法是支持緩存的,當標記在一個類上時則表示該類所有的方法都是支持緩存的。對於一個支持緩存的方法,Spring會在其被調用后將其返回值緩存起來,以保證下次利用同樣的參數來執行該方法時可以直接從緩存中獲取結果,而不需要再次執行該方法。Spring在緩存方法的返回值時是以鍵值對進行緩存的,值就是方法的返回結果,至於鍵的話,Spring又支持兩種策略,默認策略和自定義策略,這個稍后會進行說明。需要注意的是當一個支持緩存的方法在對象內部被調用時是不會觸發緩存功能的(意思是在方法自身內部調用)。@Cacheable可以指定三個屬性,value、key和condition。
@Service public class TestServiceImpl implements TestService { @Override @Cacheable("test") public String get(String id) { System.out.println("get value by id"+ id+ System.currentTimeMillis()); return id; } @Override public String getIn(String id) { System.out.println("get value by id"+ id+ System.currentTimeMillis()); return id; } }
如上,當調用第一個get方法時,除了第一次,后面的調用都不會在控制台輸出,第二個卻會在每一次調用的時候輸出,說明了對象內部調用@cacheable 不會生效