Spring

**Spring是一个基于IOC和AOP的结构J2EE系统的框架 **

IOC

反转控制,Inversion of Control.将new方式创建对象变为交给Spring创建对象.
DI 依赖注入 Dependency Inject.会在生成的对象中注入默认值.

使用.

1.IDEA创建Spring项目.

2.修改spring-config.xml,加入需要的类的bean.

<?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="c" class="pojo.Category">
        <property name="name" value="category 1" />
    </bean>
</beans>

3.使用时创建一个ApplicationContext的ClassPathXmlApplicationContext对象.之后通过该对象创建bean对象.

 public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "spring-config.xml" });

        Category c = (Category) context.getBean("c");

        System.out.println(c.getName());
    }

4.注入对象

<bean name="p" class="com.how2java.pojo.Product">
    <property name="name" value="product1" />
    <property name="category" ref="c" />
</bean>

注解方式:

    <context:annotation-config/>
    <bean name="c" class="com.how2java.pojo.Category">
        <property name="name" value="category 1" />
    </bean>
    <bean name="p" class="com.how2java.pojo.Product">
        <property name="name" value="product1" />
    </bean>

在Product的category属性或者setCategory()方法前加上@Autowired注解
或者在category属性前加上@Resource(name="c")注解

5.完全注解方式.

1.新增<context:component-scan base-package="com.how2java.pojo"/>告诉Spring,bean类的位置都在包下.
2.在每个bean的类声明前加上@Component("name")标明此类是bean.初始化写在属性声明中.

AOP

面向切面编程.为了让不同的逻辑分离开来可以分别处理,AOP是必要的.AOP将程序的逻辑按不同的方面来看待,将程序逻辑划分为几个不同的切面.每个切面分别实现自己相关的逻辑,然后通过Spring整合到一起.这样做的好处在于每个方法都可以只关心自己负责的逻辑,方便了维护和使用,减少了代码的重复.
配置业务类:Component表示是bean,交给spring管理

@Component("s")
public class ProductService {
    public void doSomeService(){
        System.out.println("doSomeService");
    }
     
}

配置切面@Aspect表示是切面,@Around表示切入ProductService类的所有方法.

@Aspect
@Component
public class LoggerAspect {
     
    @Around(value = "execution(* com.how2java.service.ProductService.*(..))")
    public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("start log:" + joinPoint.getSignature().getName());
        Object object = joinPoint.proceed();
        System.out.println("end log:" + joinPoint.getSignature().getName());
        return object;
    }
}

配置xml

<context:component-scan base-package="com.how2java.aspect"/>
<context:component-scan base-package="com.how2java.service"/>
<aop:aspectj-autoproxy/>  

测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-config.xml")
public class testSpring {
    @Autowired
    Category c;
    @Autowired
    ProductService s;

    @Test
    public void test() {
//        System.out.println(c.getName());
        s.doSomeService();
    }
}

参考资料:
how2j
java3y

posted on 2019-08-14 13:16  Best_Efforts  阅读(182)  评论(0编辑  收藏  举报

导航