Entdecken Sie eBooks
Kategorien
Entdecken Sie Hörbücher
Kategorien
Entdecken Sie Zeitschriften
Kategorien
Entdecken Sie Dokumente
Kategorien
Programmiertechniken in verteilten
Systemen
Dipl.-Ing. Paul Panhofer Bsc.
9. Dezember 2019
sytd htl krems - alauntalstrasse 29
@RequestMapping(path="/branches")
@RestController // <-- Framework Hook
public class BranchResource implements Serializable{
@GetMapping(path="/{id}")
public ABranch read(@PathVariable Long id){
...
}
...
try{
mapper.readValue(jsonMessage, User.class);
}catch(JsonProcessingException ex){
ex.printStackTrace();
log.error("invalid data");
}
}
}
...
}
}
@ExceptionHandler(JsonProcessingException.class)
@ResponseBody
@ResponseStatus(HttpStatus.NOT_FOUND)
public String
jsonProcessingFailed(JsonProcessingException ex){
...
}
@RabbitListener(queues="htl.sytd")
public void listen(String message) throws
JsonProcessingException {
...
}
Pattern: Factory
Der Spring Container ist für die Verwaltung von CDI Beans
verantwortlich.
Hinweis: Die folgende Liste ist nur ein kleiner Auszug der
möglichen Annotationen.
@ControllerAdvise
@RestController
@Configuration
@Component
@Service
@Bean
...
...
/*
* Search Codebase for a @Component or @Bean with same
* class or interface
*/
@Component
@Data
public class User implements Serializable{
@Bean("user")
public User createUser(){
return new User();
}
@Qualifier("admin")
@Component
@Data
public class Admin extends User{...}
@Qualifier("guest")
@Component
@Data
public class Guest extends User{...}
@Qualifier("admin")
@Autowired
public User admin;
@Qualifier("guest")
@Autowired
public User guest;
@Target({ElementType.FIELD, ElementType.METHOD,
ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface User {
String value();
}
@User("admin")
@Component
@Data
public class Admin extends User{...}
@User("guest")
@Component
@Data
public class Guest extends User{...}
@User("admin")
@Autowired
public User admin;
@User("guest")
@Autowired
public User guest;
@Bean("admin") @User("admin")
public User createAdmin(){
return new Admin();
}
@Bean("user") @User("guest")
public User createGuest(){
return new Guest();
}
@PostConstruct
public void init(){ ... }
@PreDestroy
public void dispose(){ ... }
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
//@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
//@Scope("singleton")
//@Scope("prototype")
@Component
public class User implements Serializable {
...
}
@RunWith(SpringRunner.class)
class CDITest{
@Autowired
private ApplicationContext applicationContext;
• Transaction Management
• Logging
• Performance Monitor
• Ecxeption Handling
• Security
• Audit Log Management
tr.start();
Double value = bankService.checkAccount(accountId);
tr.commit();
}
}
tr.commit();
return result;
}
}
Dipl.-Ing. Paul Panhofer Bsc. — Spring Boot — 9. Dezember 2019
60/76
sytd htl krems - alauntalstrasse 29
@Component
@Aspect // Definition eines Aspekts
public class TransactionAspect {
expression(
modifiers-pattern? // optional
return-type-pattern
declaring-type-pattern? // optional
method-name-pattern(param-pattern)
thorws-pattern? // optional
)
/*
* checkAccount Methode der BankService Klasse
*/
expression(
public
Double
at.htl.krems.service.BankService.checkAccount(..)
)
/*
* checkAccount Methode einer beliebigen Klasse
*/
expression(
public
Double
checkAccount(..)
)
/*
* beliebige Methode deren Name mit check beginnt
*/
expression(
*
*
check*(..)
)
/*
* checkAccount Methode aller Klassen in einem bestimmten
* Package
*/
expression(
*
*
at.htl.krems.service.*.*(..)
)
// keine Parameter
expression( public double checkAccount() )
@Before("execution(* * checkAccount(..))")
public void logCall(JointPoint jp){
...
MethodSignature ms = (MethodSignature)
jp.getSignature();
log.info(ms);
..
Object[] args = jp.getArg();
...
}
@Component
@Aspect
public class LoggingAspect{
@AfterReturning(
pointcut="execution(* * checkAccount(..))",
returning="value")
public void logCall(JointPoint jp, double value){
...
}
@Component
@Aspect
public class LoggingAspect{
@AfterThrowing(
pointcut="execution(* * checkAccount(..))",
throwing="ex")
public void logCall(JointPoint jp, Throwable ex){
...
}
}
return result;
}
}