[SSM atinge a grande fábrica diretamente] Capítulo 2: Explicação detalhada do arquivo de configuração do Spring

contente

3. Arquivo de configuração do Spring

3.1 Configuração básica da tag Bean

3.2 Configuração do escopo da tag do bean

3.3 Configuração do ciclo de vida do Bean

3.4 Três maneiras de instanciação de Bean

3.5 Introdução à injeção de dependência de bean

3.6 Análise de Injeção de Dependência de Bean

3.7 Conceito de injeção de dependência do Bean

3.8 Método de injeção de dependência de bean

3.9 Tipos de Dados de Injeção de Dependência de Bean

3.10 Apresentando outros arquivos de configuração (desenvolvimento por módulos)

Pontos de conhecimento


3. Arquivo de configuração do Spring

3.1 Configuração básica da tag Bean

O objeto de configuração é criado pelo Spring .

Por padrão, ele chama o construtor sem argumentos na classe . Se não houver um construtor sem argumentos, ele não poderá ser criado com êxito.

Propriedades básicas:

  1. id : o identificador exclusivo da instância do bean no contêiner Spring
  2. class : o nome totalmente qualificado do bean

3.2 Configuração do escopo da tag do bean

escopo: refere-se ao escopo do objeto, os valores são os seguintes:

Gamas

ilustrar

único

padrão, singleton

protótipo

Prático

solicitação

No projeto WEB, o Spring cria um objeto Bean e armazena o objeto no campo de solicitação

sessão

No projeto WEB, o Spring cria um objeto Bean e armazena o objeto no domínio da sessão

sessão global

No projeto WEB, é aplicado no ambiente Portlet, caso não exista o ambiente Portlet, a globalSession é equivalente à sessão.

1) Quando o valor do escopo é singleton

Número de instanciações de beans: 1

Tempo de instanciação do Bean: quando o arquivo principal do Spring é carregado, instancia a instância do Bean configurada

Ciclo de vida do feijão:

  1. Criação de Objetos: Os objetos são criados quando o aplicativo é carregado e o contêiner é criado
  2. Objeto em execução: enquanto o contêiner existir, o objeto estará ativo
  3. Destruição do objeto: Quando o aplicativo é desinstalado e o contêiner é destruído, o objeto é destruído

2) Quando o valor do escopo é protótipo

Número de instanciações de beans: múltiplo

Tempo de instanciação do Bean: O Bean é instanciado quando o método getBean() é chamado

  1. Criação de objeto: ao usar um objeto, crie uma nova instância de objeto
  2. Objeto em execução: enquanto o objeto estiver em uso, ele estará ativo
  3. Destruição de objetos: quando um objeto não é usado por um longo tempo, ele é recuperado pelo coletor de lixo do Java

3.3 Configuração do ciclo de vida do Bean

  1. init-method : especifica o nome do método de inicialização na classe
  2. destroy-method : o nome do método destroy na classe especificada

3.4 Três maneiras de instanciação de Bean

1 ) Instanciar usando o construtor sem argumentos

Ele criará um objeto de classe de acordo com o construtor padrão sem argumentos. Se não houver um construtor padrão sem argumentos no bean, a criação falhará

<bean id="userDao" class="com.project.dao.impl.UserDaoImpl"/>

2) Instanciação de método estático de fábrica

O método estático da fábrica retorna a instância do Bean

Criar uma classe de fábrica

public class StaticFactoryBean {

public static UserDao createUserDao(){

return new UserDaoImpl();

}

}
<bean id="userDao" class="com.project.factory.StaticFactoryBean" 
factory-method="createUserDao" />

3 ) O método de instância da fábrica não estático da fábrica para retornar a instância do Bean

public class DynamicFactoryBean { 
    public UserDao createUserDao(){ 
        return new UserDaoImpl();
    }
}
<bean id="factoryBean" class="com.project.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>

3.5 Introdução à injeção de dependência de bean

① Criar UserService, UserService chama internamente o método save() do UserDao

public class UserServiceImpl implements UserService {

@Override public void save() {

ApplicationContext applicationContext = new

ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao");

userDao.save();

}

}

② Dê ao Spring o direito de criar UserServiceImpl

<bean id="userService" class="com.project.service.impl.UserServiceImpl"/>

③ Obtenha UserService do contêiner Spring para operação

<bean id="userService" class="com.project.service.impl.UserServiceImpl"/>

3.6 Análise de Injeção de Dependência de Bean

Atualmente , tanto a instância UserService quanto a instância UserDao existem no contêiner Spring . A prática atual é obter a instância UserService e a instância UserDao fora do contêiner e, em seguida, combiná-las no programa.

Como UserService e UserDao estão no contêiner Spring, e o programa final usa UserService diretamente, você pode definir UserDao dentro de UserService no contêiner Spring.

3.7 Conceito de injeção de dependência do Bean

Dependency Injection ( Injeção de Dependência ): É uma implementação concreta do núcleo IOC do framework Spring.

Ao escrever um programa, por inversão de controle, a criação de objetos é entregue ao Spring, mas é impossível não haver dependências no código.

O desacoplamento do IOC apenas reduz suas dependências, mas não as elimina. Por exemplo: a camada de negócios ainda chamará os métodos da camada de persistência.

A dependência entre a camada de negócios e a camada de persistência é mantida pelo Spring após o uso do Spring.

Simplificando, é esperar que o framework passe o objeto da camada de persistência para a camada de negócios, em vez de obtê-lo nós mesmos.

3.8 Método de injeção de dependência de bean

Como injetar UserDao no UserService?

1. Método de construção

2. método definido

1) definir a injeção do método

Adicione o método setUserDao em UserServiceImpl

public class UserServiceImpl implements UserService { private UserDao userDao;

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

@Override

public void save() {

userDao.save();

}

}

Configure o contêiner Spring para chamar o método set para injeção

<bean id="userDao" class="com.project.dao.impl.UserDaoImpl"/>

<bean id="userService" class="com.project.service.impl.UserServiceImpl">

<property name="userDao" ref="userDao"/>

</bean>

A essência da injeção de namespace P também é a injeção de método set, mas é mais conveniente do que a injeção de método set acima, que se reflete principalmente no arquivo de configuração, da seguinte forma: Primeiro, o namespace P precisa ser introduzido:

xmlns:p="http://www.springframework.org/schema/p"

Em segundo lugar, o método de injeção precisa ser modificado

<bean id="userService" class="com.project.service.impl.UserServiceImpl" p:userDaoref="userDao"/>

2) A injeção de construtor cria uma estrutura parametrizada

public class UserServiceImpl implements UserService {

@Override public void save() {

ApplicationContext applicationContext = new

ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao");

userDao.save();

}

}

Configure o contêiner Spring para injetar ao chamar a construção parametrizada

<bean id="userDao" class="com.project.dao.impl.UserDaoImpl"/>

<bean id="userService" class="com.project.service.impl.UserServiceImpl">

<constructor-arg name="userDao" ref="userDao"></constructor-arg>

</bean>

3.9 Tipos de Dados de Injeção de Dependência de Bean

As operações acima são todos beans de referência injetados. A referência do objeto pode ser injetada. Tipos de dados comuns, coleções, etc. podem ser injetados no contêiner.

Três tipos de dados para injeção de dados

  1. tipo de dados comum
  2. tipo de dados de referência coleção tipo de dados

O tipo de dados de referência não será repetido aqui. As operações anteriores são todas injetadas na referência do objeto UserDao. A seguir, a injeção do método set como exemplo para demonstrar a injeção de tipos de dados comuns e tipos de dados de coleção.

1) Injeção de tipos de dados comuns

public class UserDaoImpl implements UserDao { private String company; private int age;

public void setCompany(String company) {

this.company = company;

}

public void setAge(int age) {

this.age = age;

} public void save() {

System.out.println(company+"==="+age);

System.out.println("UserDao save method running....");

}

}
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl">

<property name="company" value="小明"></property>

<property name="age" value="15"></property>

</bean>

2) Injeção de tipo de dados de coleção ( List<String> )

public class UserDaoImpl implements UserDao { private List<String> strList;

public void setStrList(List<String> strList) {

this.strList = strList;

}

public void save() {

System.out.println(strList);

System.out.println("UserDao save method running....");

}

}

<bean id="userDao" class="com.project.dao.impl.UserDaoImpl">

<property name="strList">

<list>

<value>aaa</value> <value>bbb</value>

<value>ccc</value>

</list>

</property>

</bean>

4) Injeção do tipo de dados de coleta ( Map<String,User> )

public class UserDaoImpl implements UserDao { private Map<String,User> userMap;

public void setUserMap(Map<String, User> userMap) {

this.userMap = userMap;

}

public void save() {

System.out.println(userMap);

System.out.println("UserDao save method running....");

}

}

<bean id="u1" class="com.project.domain.User"/> <bean id="u2" class="com.project.domain.User"/>

<bean id="userDao" class="com.project.dao.impl.UserDaoImpl">

<property name="userMap">

<map>

<entry key="user1" value-ref="u1"/>

<entry key="user2" value-ref="u2"/>

</map>

</property>

</bean>

3.10 Apresentando outros arquivos de configuração (desenvolvimento por módulos)

No desenvolvimento real, o Spring tem muito conteúdo de configuração, o que torna a configuração do Spring muito complicada e volumosa, portanto, parte da configuração pode ser desmontada em outros arquivos de configuração, e o arquivo de configuração principal do Spring é carregado através da tag import.

<import resource="applicationContext-xxx.xml"/>

Pontos de conhecimento

Configuração de chave de mola

tag <bean>

Atributo id: o identificador exclusivo da instância do Bean no container, não é permitida nenhuma repetição atributo class: o nome totalmente qualificado do bean a ser instanciado atributo scope: o escopo do bean, comumente usados ​​são Singleton (padrão) e protótipo

<property> tag: propriedade de injeção de nome de propriedade: propriedade de nome de valor de propriedade: valor de propriedade normal injetado ref propriedade: valor de referência de objeto injetado

tag <lista>

tag <mapa>

etiqueta <propriedades>

tag <constructor-arg>

Tag <import>: importa outros sub-arquivos Spring

Acho que você gosta

Origin blog.csdn.net/qq_52360069/article/details/123555303
Recomendado
Clasificación