Spring是位于业务逻辑层的一个框架, 它和前面的struts 、 Hibernate组成了SSH 组合 。 它里面包含两个核心, IOC + AOP
-
-
IOC 的全称是 Inversion Of Control 翻译过来是控制反转的意思。
-
什么是AOP
-
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程
- IOC 的全称是 Inversion Of Control 翻译过来是控制反转的意思。 通俗的话说: 就是把对象的创建工作交给spring来完成。
-
以前创建对象:手动创建 new XXX(); 现在创建对象:都是由spring来创建(action |service | dao 这些类一般都交给spring来完成。)
-
-
<!-- 使用bean标签来告诉spring,让它创建哪一个类的实例对象 一般只会把三个层级的类给spring来创建 actionservicedao 扩展增强的类(AOP) id | name :表示的是唯一标识符。以后拿着这个值就能找到具体的类实例 class : 托管了类的全路径 Class.forName(); 默认生成的实例是单例..只有一个实例。 如果想做多个实例。 scope="prototype" init-method:初始化对象的时候调用具体的方法 destroy-method:销毁实例的时候调用具体的方法 单例情况下,会执行销毁方法。 多例则不会。 --> <bean id="us" class="com.itheima.service.impl.UserServiceImpl" scope="prototype" init-method="init" destroy-method="destroy" ></bean>
- 代码的解释
-
//创建工厂 classpath: 类路径,其实就是src下的所有资源,在编译的时候,会搬到bin/classes/ //类加载器 //创建工厂,需要依赖xml文件。 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //问工厂要对象 UserService userService = (UserService) context.getBean("us"); userService.save(); //关闭工厂,但是一般不会关闭。 ((AbstractApplicationContext) context).close();
-
-
- 要求托管的类,需要具备无参构造方法
-
public class UserServiceImpl implements UserService { @Override public void save() { System.out.println("调用了UserServiceImpl的save方法~~!"); } } xml: <bean id="us" class="com.itheima.service.impl.UserServiceImpl"></bean>
-
-
public class StaticFactory { public static UserService getBean(){ System.out.println("执行了静态方法创建对象~~~"); return new UserServiceImpl(); } } xml: <!-- 静态工厂方法: 拿着us 过来找spring的工厂,spring会去找StaticFactory,然后调用这个类中的getBean方法获取对象 --> <bean id="us" class="com.itheima.factory.StaticFactory" factory-method="getBean"></bean>
-
-
public class InstanceFactory { public UserService getBean(){ System.out.println("执行了非静态方法创建对象~~!!!~"); return new UserServiceImpl(); } } xml: <bean id="factory" class="com.itheima.factory.InstanceFactory"></bean> <!-- 当spring工厂拿到us的时候,会拿着Factory这个名称先去上面找到对应的bean,然后把class的实例给创建出来,进而调用工厂方法 --> <bean id="us" factory-bean="factory" factory-method="getBean"></bean>