Spring框架需要的依赖
-
创建普通Java工程,只需导入:spring-context
-
创建web工程,只需导入:spring-webmvc 【在普通maven工程下创建web工程作为子模块,是否获取到web相关的依赖的】
-
需要数据库和事务,则需要导入:spring-jdbc
XML实例化Bean的四种方式
Spring中所有Bean的加载方式都是懒加载
-
公共无参构造方法的创建对象
<bean id="user" class="top.onething.demo.Domain.User"/>
-
静态工厂方式创建对象
<bean id="user" class="top.onething.demo.StaticFactory" factory-method="getUser"/>
-
实例工厂方式创建对象
<bean id="factory" class="top.onething.demo.BeanFactory"/>
<bean id="user" factory-bean="factory" factory-method="getUser"/>
-
FactoryBean接口实现类创建对象
<bean id="product" class="top.onething.demo.ProductFactoryBean"/>
Spring通过FactoryBean接口实现类的对象调用getObject方法进行创建
public class ProductFactoryBean implements FactoryBean<Product> {
@Override
public Product getObject() throws Exception {
return new Product();
}
@Override
public Class<Product> getObjectType() {
return Product.class;
}
}
FactoryBean和BeanFactory的区别
-
BeanFactory是一个创建对象的工厂,通过工厂方法创建对象
-
FactoryBean是一个能创建对象的Bean,通过该Bean的getObject方法获取对象
注解方式实例化Bean的方式
@Component、@Controller、@Service、@Repository
XML属性注入
ref和value的区别:属性注入时,注入对象使用ref,注入字符串、数字就使用value
-
使用set方法注入
<bean id="UserService" class="top.onething.demo.UserService">
<property name="id" value="100"/>
<property name="userDao" ref="userDao"/>
</bean>
-
注入的属性为数组,有两种方式
方式1:
<property name="arr" value="A,B,c"/>
方式2:
<property name="arr">
<array>
<value>A</value>
<value>B</value>
<value>C</value>
</array>
</property>
-
使用有参构造注入
<bean id="product" class="top.onething.demo.Domain.User">
<constructor-arg name="id" value="111"/>
<constructor-arg name="username" value="测试"/>
</bean>
Bean对象的生命周期
创建对象---》初始化---》运行---》销毁
Bean对象的初始化方法和销毁方法
<bean id="user" class="top.onething.demo.User" init-method="init" destroy-method="destory"/>
Bean对象的作用域
作用域:单例【singleton】、多例【prototype】
加载方式:延迟加载、迫切加载
-
spring默认作用域为单例,默认是懒加载【延迟加载】
-
xml配置多例
<bean id="product" class="top.onething.demo.Domain.Product" scope="prototype"/>
-
xml配置迫切加载
<bean id="product" class="top.onething.demo.Domain.Product" lazy-init="false"/>
AOP
Spring实现Aop有两种方案:JDK和CGLIB
-
目标对象实现接口:spring使用JDK的java.lang.reflect.Proxy类代理
-
目标对象没有实现接口:spring使用CGLIB库生成目标对象的子类