1.spring的IOC只能做一件事:解决程序依赖问题,解耦。 (编写程序时解耦,运行时还是耦合的。)
2.
Applicontext:只会创建一次所有的bean对象,即加载xml时全部创建,即每个类都只创建一个对象,后面每次获取相同类的对象时返回的都是同一个class对象。单例对象
BeanFactory:加载不创建,每次获取bean对象时创建对应的对象,即每个类的对象可以有多个,取决于获取次数。
3.spring注册bean时成员变量注入的方法:
(1) ①无参构造函数+setter方法,xml中配置为<property/>
②有参构造方法,xml中配置为<constructor-arg/>
注:参数为基本变量类型一般用name="" value="";为其他类的对象则用ref=""
(2)用某一个类的一个非静态方法获取对象,(可能该对象对应的class类得不到吧,所以只能用其他类的方法返回对象)
import *.*.Person;
public class PersonFactory{
pbulic Person getPerson()
{
return new Person();
}
}
此时xml的bean配置:①配置PersonFactory类的bean对象 ②配置根据PersonFactory对象的getPerson()方法得到的bean对象
<!-- 实例工程方法需要先创建工厂实例,然后在创建所需对象的时候,将其赋值为factory-bean -->
<bean id="personFactory" class="com.learn.spring.factory.PersonFactory"></bean>
<bean id="person" factory-bean="personFactory" factory-method="getPerson"></bean>
(3)用某一个类的静态方法获取对象,(静态方法可以直接用类名调用,因此不用讲factory配置为bean对象)
import *.*.Person;
public class PersonFactory{
pbulic static Person getPerson()
{
return new Person();
}
}
此时xml的bean配置:
<bean id="person" class="com.learn.spring.factory.PersonStaticFactory" factory-method="getPerson"></bean>
注:第二、三种方法多用于将jar包中的类对象存入spring容器中。
第二、三中方法的参数怎么配置,若getPerson(String name){return new Person(name);}
getPerson(User user){return new Person(User);}
4.spring bean的作用域(想到maven的作用域)
①<scope></scope> 五种属性:Singleton(默认属性);prototype;request;session;Global Session(表示集群范围的bean,即所有服务器都用这一个bean对象)
5.bean声明周期:
① Singleton单例: ②prototype多例:
5.spring基于注解配置bean及bean注入
注解包括@Component,@Controller,@Service,@Reposity这四个等价属性包括value=""
@Autowired,@Qualifier,@Resource;使用方法见百度。。。。
spring学习中的问题记录:
(1) 编写类时用的是编写接口加实现类方式,声明对象时:对象引用用接口类,对象用实现类;
(2) 自动配置bean对象的成员变量问题,因为是由spring配置的,因此获取对象要用applicationcontext的getBean()方法获取,否则用new获取则不会自动配置成员变量
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-bean.xml");
/**
* serviceImpl ser = new serviceImpl();
* 这样不会自动根据spring-bean.xml配置成员变量Dao。会产生NullPointerException(空指针异常,即Dao这个对象引用没有指向的对象)
* 因此只能用getBean()方法获取对象,会自动配置返回对象的变量。
*/
IService service = applicationContext.getBean("service",serviceImpl.class);//new serviceImpl();
public class serviceImpl implements IService {
private IDao dao;
public void setDao(IDao dao) {
this.dao = dao;
}
这里我用的maven管理项目,sping+mybatis为一个基础maven项目,springmvc依赖此基础项目;
对基础项目:项目名为spring_Data,ID配置如下:
<groupId>org.example</groupId>
<artifactId>spring_Database</artifactId>
<version>1.0-SNAPSHOT</version>
然后在pom.xml所在文件夹执行cmd:mvn install将该项目导入本地maven仓库,就可以用来依赖并使用它了。
对springmvc项目,<springmvc.xml>配置依赖上面的spring+mybatis:
<dependency>
<groupId>org.example</groupId>
<artifactId>spring_Database</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
课程来源:Spring教程IDEA版,Bilibili