使用标签简化IoC:
1。使用标签来完成IoC,就必须有IoC注解的解析器
使用context:component-scan来扫描spring需要管理的bean
base-package就告诉spring,去哪些包及其子包里去扫描bean,如果有多个包需要被扫描;只需要用逗号隔开多个包即可
<context:component-scan base-package=“com.ujiuye.spring.xxx” />
2.标注Bean的注解:@Component
默认情况,直接使用类的名字(首字母小写作为bean的名字)
如果要修改bean的名称;直接使用value属性来重新定义bean的名称
@Component(“otherbean”)
public class OtherBean {}
3.使用@Component的限制:
对于没有源代码的类(框架内部的预定义类),只能用XML配置;比如DataSource就只能使用XML方式来做IOC.
4.bean组件版型标签
bean组件版型:
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)、
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
5.指定bean的作用域:@Scope(“prototype”)
6.初始化和销毁方法
@PostConstruct
public void init() {
相当于
@PreDestroy
public void destory() {
相当于
7.选用xml还是注解:
1),Annotation:使用方便,XML文件很小,但是,依赖关系又重新回到了代码当中;
2),XML:使用稍微复杂,但是,代码很干净,代码不会很任何框架产生关系;XML安全;
代码:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>text</groupId>
<artifactId>Spring02</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<!--
定义全局变量:变量名为project.spring.version
-->
<project.spring.version>5.0.0.RELEASE</project.spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${project.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${project.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${project.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${project.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${project.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${project.spring.version}</version>
</dependency>
<!--德鲁伊连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<build>
<!--加载资源文件-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
App-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--IoC注解扫描
组件扫描
base-package:从配置的包中,扫描所有标注了IoC注解的类型,自动的创建该类的对象
并且放入到Spring容器(包含子包)
-->
<context:component-scan base-package="text.spring._06_component"/>
</beans>
SomeBean.java:
package text.spring._06_component;
import com.sun.org.apache.xml.internal.security.Init;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* Created by thinkpad on 2019/9/3.
*/
@Controller("some")
//@Scope("prototype")
public class SomeBean {
public SomeBean(){
System.out.println("对象被创建...");
}
@PostConstruct
public void init(){
System.out.println("对象初始化..");
}
public void work(){
System.out.println("正常工作..");
}
@PreDestroy
public void destory(){
System.out.println("对象销毁...");
}
}
App.java:
package text.spring._06_component;
import text.spring._05_resource.Employee;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Created by thinkpad on 2019/9/3.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class App {
@Autowired
private ApplicationContext context;
@Test
public void testIoc() throws Exception {
SomeBean someBean = context.getBean("some",SomeBean.class);
System.out.println(someBean);
}
@Test
public void testScope() throws Exception {
System.out.println(context.getBean(SomeBean.class));
System.out.println(context.getBean(SomeBean.class));
System.out.println(context.getBean(SomeBean.class));
System.out.println(context.getBean(SomeBean.class));
System.out.println(context.getBean(SomeBean.class));
System.out.println(context.getBean(SomeBean.class));
}
@Test
public void testLifecycle() throws Exception {
SomeBean someBean = context.getBean(SomeBean.class);
someBean.work();
}
}