Aunque no le tengo especial apego al trabajo en Java con Anotaciones, no deja de ser cierto, que en Spring, nos ahorra mucho trabajo, aunque tambien es mas delicado el no equivocarse. De cualquier forma, y como sois vosotros los que debeis decidir si quereis o no trabajar con anotaciones, yo he preparado una pequeña lista, a modo de recordatorio.
Anotación | Se aplica a | Descripcion y Ejemplos |
---|---|---|
@Autowired | Metodos (setters) | Inyectar un Bean usando la autodetección de Spring buscando por tipos Aunque Autowirted implica Required, se puede evitar indicando @Autowired(requiered=false) . @Autowired public void createTemplate(@Qualifier(«xDs») Datasource dataSource){ … |
@Bean | Configuracion-Metodo | Permite definir comportamientos enlos métodos definidospublic class Foo { public void init() { // initialization logic } public void cleanup() { // destruction logic } }@Configuration public class AppConfig { @Bean(initMethod = «init», destroyMethod = «cleanup» ) public Foo foo() { return new Foo(); } } |
@Component | Clase | indica que la clase anotada es un component (o un Bean de Spring)@Component(«Entrada») @Scope(BeanDefinition.SCOPE_PROTOTYPE) Public Class Entrada extends …… |
@Configuration | Configuracion | Permite establecer ficheros java para configurar@Configuration public class ConfigA { @Bean public A a() { return new A(); } } |
@Controller | Clase | Component confuncion Controlador@Controller(«usuarioController») public class UsuarioController() { …. |
@Import | Configuracion | Permite importar datos desde otra clase de configuracion@Configuration @Import(ConfigA.class) public class ConfigB { @Bean public B a() { return new A(); } } Despues, solo nos deberemos referir a la configuracion de B, aunque tendremos accesos a todas las definicionespublic static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class); // now both beans A and B will be available… A a = ctx.getBean(A.class); B b = ctx.getBean(B.class); } |
@ModelAttribute | Parametros de un método | Mapea el formulario albin que lo representa |
@PathVariable | Parametros de un método | Mapea una variable de la URL con un parametro@RequestMapping(value=»/{codigo}», method = RequestMethod.DELETE, produces = «text/html») public String ProductoController.delete(@PathVariable(«codigo») String codigo){…. |
@PreDestroy | método | Señala el metodo a ejecutar antes de que se destruya el bean
@PreDestroy |
@PostConstruct | método | Señala el metodo a ejecutar al terminar de construir el bean
@PreConstruct |
@Qualifier | Concreta posibles confusiones de nombres en Autowired@Autowired @Qualifier(«student1») private Student student; |
|
@Repository | ||
@RequestMapping | Clase o Método | Relaciona una URLcon unaclaseo método. Siempreha de indicar una URL@RequestMapping(«/clientes/*») @Controller public class ProductosClientesController() {….Puede establecer el metodo que lo genera, e indicar lo que devuelve @RequestMapping(method = RequestMethod.POST, produces = «text/html») |
@RequestParam | Parametros de un método | Mapea nombres recibidos con parametros, y se puede indicar si es «required» o nopublic String busqueda(@RequestParam(value=»nombre» String nombre, Model articulos){… |
@Required | Metodos (setters) | Indica que el dato es necesario@Required public void setAge(Integer age) { this.age = age; } |
@Resources | Metodos (setters) | Semejante a Autowired, pero buscara la coincidencia por nombre @Resources(name=»edad») public void setAge(Integer age) { this.age = age; } |
@Service | ||
@Scope | Bajo Bean | El Scope por defecto es Singlenton, pero lo podemos modificar@Configuration public class AppConfig { @Bean @Scope(«prototype») public Foo foo() { return new Foo(); } } |
4 comentarios