小编Pol*_*zny的帖子

如何检测@Cacheable方法输出是否来自缓存?

有一个用@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)

spring ehcache spring-annotations spring-cache

6
推荐指数
1
解决办法
2028
查看次数

Angular 5 - 如何将更改检测仅限于组件范围?

如何配置 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)

然后在此组件中不会检测到更改,但仍会为整个应用程序触发更改检测。所以这不是一个解决方案。

javascript angular2-changedetection angular angular5

5
推荐指数
1
解决办法
1248
查看次数

在 PL/SQL 块中定义引用其自身集合的记录类型

如何在 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

oracle plsql forward-declaration hoisting

2
推荐指数
1
解决办法
2008
查看次数