goals:spring因企业级框架过于复杂而诞生,是软件设计层框架 整体管理+项目分层,开发者自主选择组件 解耦合以及高拓展性
ORM:object relationship mapping
spring boot spring cloud 都是基于spring
spring提供各个层面的solution Spring MVC,Spring Data,Spring Cloud
如何使用IoC: 1.创建Maven工程,添加依赖 spring-context
2.创建entity类 Student类,包含id,name,age
传统方式:每次new Student IoC方式:通过配置文件中添加需要管理的对象,XML格式,文件名可以自定义 习惯:XML格式配置文件放在resources包里,java代码放在java包中,不要混
进入XML: <bean id="student" class="com.james.Student"></bean> id可以自定义
定义好后需要加载配置文件,利用ApplicationContext类
ApplicationContext app = new ClassPathXmlApplicationContext("./classpath") Student student = app.getBean("Student")
同样的可以再Bean中定义属性
<bean id="student" class="com.james.Student">
<property name="id" value="12"></property>
<property name="age" value="11"></property>
<property name="name" value="aas"></property>
</bean>
类似的entity都需要在beans中定义,分别用多个bean标签 bean标签完成对象的管理 id:对象名 class:对象模板类(所有交给IoC容器管理的类必须有无参构造,因为Spring底层通过反射机制创建对象) 对象的成员通过property标签完成赋值 name:成员变量名 value:成员变量值(基本数据类型,String可以直接赋值,如其他引用不能使用value) ref:将IoC中另一个bean赋给当前成员变量(这一过程其实是DI-依赖注入)
Spring的工厂模式
Spring取bean的操作其实就是工厂模式的体现
-
静态工厂模式
-
实例工厂模式
我们通过静态工厂类来控制对象的创建,只要读到配置文件,就会将参数传入构造方法并创建,放在IoC容器中,不论我们使用与否。
Factory类:
public class Factory {
private static Map<String,User> userMap;
static{
userMap = new HashMap<String,User>();
userMap.put("James",new User("1L","James"));
}
public static User getCar(String username){
return userMap.get(username);
}
}
Spring-factory.xml
FactoryTest测试类:
public class FactoryTest {
public static void main(String[] args) {
ApplicationContext factory = new ClassPathXmlApplicationContext("spring-factory.xml");
User user =(User) factory.getBean("UserFactory");
System.out.println(user.getUsername());
System.out.println(user.getPassword());
}
}
结果是1L,James
这里注意一下,只要解析到XML后对象已经创建完成,参考单例模式