注解扫描
<context:component-scan base-package="com.igeek.day2"/>
spring 常用注解@Component: 将类标记为Spring的托管Bean。可以与@Autowired和@Resource一起使用来实现依赖注入。
@Service: 与@Component作用相同,但在表示业务逻辑层的类上使用更为清晰。
@Repository: 与@Component作用相同,但在表示数据访问层的类上使用更为清晰。
@Controller: 与@Component作用相同,但在表示控制器层的类上使用更为清晰。
@Autowired: 自动装配Bean。可以用于构造方法、属性和方法上。Spring会自动查找匹配类型的Bean并将其注入。
@Resource: 自动装配Bean,与@Autowired类似,但具有更多的选项。可以通过name属性指定Bean的名称。
@Qualifier: 结合@Autowired或@Resource使用,指定注入的Bean名称。
@Value: 注入属性值。可以用于构造方法、属性和方法,支持字面值和Spring表达式。
@ComponentScan: 启用组件扫描。可以通过basePackages属性指定需要扫描的包名。
@Configuration: 表示一个配置类,用于替代XML配置文件。
@Bean: 在配置类中使用,用于声明一个Bean。
@PostConstruct: 在Bean初始化之后调用的方法上使用,在方法上添加一些额外的初始化逻辑。
@PreDestroy: 在Bean销毁之前调用的方法上使用,用于在销毁之前执行一些清理操作。
-
基本的Spring配置
- 配置命名空间和XML模式
- 使用
<beans>
元素作为根元素来定义Spring Bean的配置CopyCopy
-
组件扫描
- 使用
<context:component-scan>
元素来启用自动组件扫描CopyCopy base-package
属性指定需要扫描的基础包CopyCopy
- 使用
-
Bean的创建和初始化
- 使用
<bean>
元素定义一个Spring BeanCopyCopy name
属性指定Bean的名称Copyclass
属性指定Bean的类名CopyCopyscope
属性指定Bean的作用域CopyCopy- 使用
<property>
元素设置Bean的属性值CopyCopy value
属性指定属性的字面值Copyref
属性指定属性的引用值CopyCopy
- 使用
-
工厂方法创建Bean
- 使用静态工厂方法创建Bean,通过
factory-method
属性指定静态工厂方法的名字CopyCopy - 使用实例工厂创建Bean,通过
factory-bean
属性指定实例工厂的实例名,通过factory-method
属性指定实例工厂方法的名字CopyCopyCopy
- 使用静态工厂方法创建Bean,通过
-
依赖注入
- 使用
<property>
元素进行依赖注入,通过name
属性指定依赖的属性名,通过value
属性指定属性的字面值,通过ref
属性指定属性的引用值CopyCopyCopyCopyCopyCopy
- 使用
-
生命周期回调
- 使用
init-method
属性指定Bean初始化时需要调用的方法CopyCopy - 使用
destroy-method
属性指定Bean销毁时需要调用的方法CopyCopy
- 使用
-
后处理Bean
- 定义一个后处理Bean,可以在Bean实例化和初始化之前或之后进行一些自定义的处理操作
applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--静态工厂方法-->
<bean name="bean2" class="com.igeek.day2.Bean2" factory-method="getInstance"/>
<!-- 实例工厂-->
<bean name="bean3Fac" class="com.igeek.day2.Bean3Factory"/>
<!-- 产品bean3-->
<bean name="bean3" factory-bean="bean3Fac" factory-method="createBean3"/>
<!--创建date对象-->
<bean name="date" class="java.util.Date"/>
<bean name="user" class="com.igeek.day2.entity.User" scope="prototype">
<property name="name" value="lisi"/>
<property name="age" value="335"/>
<!-- <property name="birth" value="2000-01-01"/>-->
<property name="birth" ref="date1"/>
</bean>
<!-- 日期工厂-->
<bean name="fmt" class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd"/>
</bean>
<bean name="date1" factory-bean="fmt" factory-method="parse">
<constructor-arg value="2000-01-01"/>
</bean>
<bean name="bean4" class="com.igeek.day2.Bean4Factory" scope="prototype" />
<!-- 作用域scope="prototype"-->
<bean name="life" class="com.igeek.day2.LifeCycle" init-method="show" destroy-method="destory"/>
<!-- 后处理bean-->
<bean class="com.igeek.day2.DemoPoce"/>
</beans>
applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--静态工厂方法-->
<bean name="bean2" class="com.igeek.day2.Bean2" factory-method="getInstance"/>
<!-- 实例工厂-->
<bean name="bean3Fac" class="com.igeek.day2.Bean3Factory"/>
<!-- 产品bean3-->
<bean name="bean3" factory-bean="bean3Fac" factory-method="createBean3"/>
<!--创建date对象-->
<bean name="date" class="java.util.Date"/>
<bean name="user" class="com.igeek.day2.entity.User" scope="prototype">
<property name="name" value="lisi"/>
<property name="age" value="335"/>
<!-- <property name="birth" value="2000-01-01"/>-->
<property name="birth" ref="date1"/>
</bean>
<!-- 日期工厂-->
<bean name="fmt" class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd"/>
</bean>
<bean name="date1" factory-bean="fmt" factory-method="parse">
<constructor-arg value="2000-01-01"/>
</bean>
<bean name="bean4" class="com.igeek.day2.Bean4Factory" scope="prototype" />
<!-- 作用域scope="prototype"-->
<bean name="life" class="com.igeek.day2.LifeCycle" init-method="show" destroy-method="destory"/>
<!-- 后处理bean-->
<bean class="com.igeek.day2.DemoPoce"/>
</beans>