有一个用@Cacheable注释的方法返回一个对象:
@Service
public class UserService {
@Cacheable("userData")
public UserData getUserData(String userName) {
UserData userData = new UserData();
userData.setGotFromCache(false);
return userData;
}
}
Run Code Online (Sandbox Code Playgroud)
和 UserData 对象:
@Getter
@Setter
public class UserData {
private boolean gotFromCache;
}
Run Code Online (Sandbox Code Playgroud)
如何检测@Cacheable注解的方法是否被调用或者其输出是否来自缓存?
解决方法是注入 CacheManager 并手动检测它:
Cache cache = this.cacheManager.getCache("userData");
UserData userData = null;
String userName = "some user name";
if (cache != null) {
Object key = SimpleKeyGenerator.generateKey(userName);
userData = cache.get(key, UserData.class);
if (userData != null) {
userData.setGotFromCache(true);
} else {
userData = userService.getUserData(userName);
cache.put(key, userData); …Run Code Online (Sandbox Code Playgroud) 如何配置 Angular 组件不触发整个应用程序的更改检测,而只触发组件本身及其子组件?
工作示例:https : //stackblitz.com/edit/angular-irc-starter-4txpbu?file=app%2Ftimer%2Ftimer.component.ts
有一个计数器每秒增加一个值。它是 TimerComponent 并且它按预期工作 - 每秒增加和更新值。
@Component({
selector: 'app-timer',
template: `{{value}}`
})
export class TimerComponent implements OnInit {
value: number = 0;
ngOnInit() {
setInterval(() => this.value++, 1000);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,请查看父组件 AppComponent。
<h3>Internal timer:</h3>
<p>Should not perform change detection for the whole app</p>
<app-timer></app-timer>
<h3>External binding</h3>
<p>Should not be updated after timer changes</p>
<p>{{someBindingProperty}}</p>
Run Code Online (Sandbox Code Playgroud)
someBindingProperty是一个吸气剂:
get someBindingProperty() {
this.bindingTimer++;
return this.bindingTimer;
}
Run Code Online (Sandbox Code Playgroud)
问题:当 TimerComponent 增加值时,会触发整个应用程序的更改检测。是否可以仅在组件和子组件内触发更改检测?
注意:如果我添加到 TimerComponent:
changeDetection: ChangeDetectionStrategy.OnPush
Run Code Online (Sandbox Code Playgroud)
然后在此组件中不会检测到更改,但仍会为整个应用程序触发更改检测。所以这不是一个解决方案。
如何在 PL/SQL 匿名块中定义包含自身集合属性的记录类型?看下面的例子:
DECLARE
type t_item is record (
name varchar2(64),
children t_items -- referencing t_items type
);
type t_items is table of t_item; -- referencing t_item type
BEGIN
-- script code
END
Run Code Online (Sandbox Code Playgroud)
PL/SQL 没有类型提升,因此 Oracle 引擎会引发异常:
PLS-00498:在声明之前非法使用类型
如何定义属性中t_item包含 a 的记录?table of t_itemchildren
angular ×1
angular5 ×1
ehcache ×1
hoisting ×1
javascript ×1
oracle ×1
plsql ×1
spring ×1
spring-cache ×1