[Primavera] El final del desarrollo de anotaciones de archivos de configuración xml

Anotaciones originales de primavera

anotación Descripción
@Componente Usado en la clase para instanciar Bean
@Controlador Usado en la clase para instanciar Bean (con semántica de capa web)
@Servicio Usado en la clase para instanciar Bean (con semántica de capa de servicio)
@Repositorio Usado en la clase para instanciar Bean (con semántica de capa dao)
@Autowired Inyectar tipos de referencia
@Calificatorio Inyectar tipos de referencia
@Recurso Inyectar tipos de referencia
@Valor Inyectar tipos básicos
@Alcance Configuración del alcance del bean
@PostConstruct Configuración del ciclo de vida del bean (llamado al inicializar)
@Predestroy Configuración del ciclo de vida del frijol (llamado cuando se destruye)

Configurar el escaneo de componentes

El escaneo de componentes se configura en applicationContext.xml, que le dice a Spring que escanee las anotaciones debajo del paquete y sus subpaquetes

Nota: El análisis del componente de configuración debe realizarse en el espacio de nombres de contexto, así que no olvide agregar el espacio de nombres de contexto (y su ruta de restricción)

<!-- 配置组件扫描 -->
<context:component-scan base-package="service" />
<context:component-scan base-package="dao" />

@Component se usa para instanciar Bean

@Component("userDao")
public class UserDaoImpl implements UserDao {
    
    

    public void sayHi() {
    
    
        System.out.println("Hello!!!");
    }
}

@ Controller / @ Service / @ Repository también se usa para instanciar Bean con semántica

@Repository("userDao")
public class UserDaoImpl implements UserDao {
    
    

    public void sayHi() {
    
    
        System.out.println("Hello!!!");
    }
}

@Autowired inyecta automáticamente referencias basadas en el nombre de la clase (si la clase tiene varios beans en el contenedor de primavera, se informará un error)

@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Autowired
    private UserDao userDao;

    public void sayHi() {
    
    
        userDao.sayHi();
    }
}

@ Autowired + @ Qualifier inyecta referencias de acuerdo con la identificación (dos juntas, no menos escritura)

@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Autowired
	@Qualifier("userDao")
    private UserDao userDao;

    public void sayHi() {
    
    
        userDao.sayHi();
    }
}

@Resource inyecta referencias basadas en id (completamente equivalente a @ Autowired + @ Qualifier)

@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Resource(name = "userDao")
    private UserDao userDao;

    public void sayHi() {
    
    
        userDao.sayHi();
    }
}

@Value inyecta tipos de datos básicos (generalmente se usa junto con la sintaxis SPEL)

<!-- 在applicationContext.xml引入properties资源文件,就将这些键值对“倒入”了spring容器中 -->
<context:property-placeholder location="classpath:xxx.properties" />
@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Value("root")
	private String username;

	@Value("${password}")
	private String password;

	// ...
}

@ Alcance de la configuración del alcance (singleton singleton / prototype múltiples casos)

@Component("userDao")
@Scope("prototype")
public class UserDaoImpl implements UserDao {
    
    

    // ...
}

@ PostConstruct / @ PreDestroy ciclo de vida de la configuración (método llamado automáticamente durante la inicialización / destrucción)

@Component("userDao")
public class UserDaoImpl implements UserDao {
    
    

    @PostConstruct
    public void init() {
    
    
        System.out.println("初始化时调用我 >_<");
    }

 	// ...

    @PreDestroy
    public void destroy() {
    
    
        System.out.println("销毁时调用我 >_<");
    }
}

 
 
 

Primavera de nuevas anotaciones

Las anotaciones clásicas anteriores no pueden reemplazar completamente el archivo de configuración xml. Por ejemplo, la siguiente situación:

  1. Beans no personalizados (Beans proporcionados directamente por terceros):<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">...</bean>
  2. Cargue el archivo de recursos:<context:property-placeholder location="xxx.properties" />
  3. Configurar el escaneo de componentes:<context:component-scan base-package="xxx" />
  4. Desarrollo de submódulos:<import resource="applicationContext-xxx.xml" />  

Usamos algunas ideas y diseños inteligentes para resolver los problemas anteriores:

  1. Ya no configure en applicationContext.xml, pero transfiera estas configuraciones a la clase config.SpringConfiguration.class
  2. La sintaxis SPEL se puede usar en applicationContext.xml, pero el código java en la clase config.SpringConfiguration.class obviamente no se puede usar. Podemos resolver este problema de manera ingeniosa: el código Java no puede usar SPEL, pero las anotaciones pueden usar SPEL; por lo tanto, la información del par clave-valor se puede inyectar en las variables miembro a través de anotaciones, y podemos usar esta información del par clave-valor indirectamente
  3. Al final, applicationContext.xml es completamente obsoleto y ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");reemplazado conApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
anotación Descripción
@Configuración Marque que esta es una clase de configuración de Spring
@Frijol El valor de retorno marcado se colocará directamente en el contenedor Spring
@PropertySource Se usa para cargar archivos de recursos
@ComponenteScan Se usa para configurar el escaneo de componentes
@Importar Para el desarrollo de submódulos
@Configuration 												// 表明这是一个配置类
@ComponentScan({
    
    "dao", "service"})							// 配置组件扫描
@PropertySource("classpath:jdbc.properties")				// 加载资源文件
@Import({
    
    xxxConfiguration.class, xxxConfiguration.class})		// 分模块开发
public class SpringConfiguration {
    
    

    @Value("${jdbc.driver}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean("dataSource")
    public DataSource getDataSource() throws Exception {
    
    
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}

 
 
 
 

 
 
 
 

 
 
 
 

Más> _ <

Supongo que te gusta

Origin blog.csdn.net/m0_46202073/article/details/113861798
Recomendado
Clasificación