java SSM第三章学习内容(Spring核心(IOC,AOP))

需导包添加依赖
java SSM第三章学习内容(Spring核心(IOC,AOP))

一.IOC概念(有参,无参)

案例思路:1.写实体类---接口---测试类
                  2.让实体类实现接口
                  3.让实体类实现接口
                  4.编辑applicationContext.xml文件,配置bean以及添加属性(constructor-arg)和值(value)
                  5.测试类使用上下文读取xml获得值


参考代码:
java SSM第三章学习内容(Spring核心(IOC,AOP))
接口:

public interface IUser {
    public void shuoHua();
}

实体类:
public class User implements IUser{
    private String name;
    private String content;
    public User(String name, String content) {
        super();
        this.name = name;
        this.content = content;
    }
    public void shuoHua() {
        System.out.println(name+"说:"+content);    
    }
    public User() {
        super();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
    
    <!-- 以下代码,bean代表新建一个对象,id为名字,class为类型 -->
    <!--constructor-arg用于设置属性,index代表下标第几个值,name代表实体类的属性名,value代表相应值  -->
    <bean id="zg" class="com.entity.User">
        <constructor-arg index="0" name="name">
            <value>张嘎</value>
        </constructor-arg>
        <constructor-arg index="1" name="content">
            <value>被人弄死我了</value>
        </constructor-arg>
    </bean>
    <bean id="rd" class="com.entity.User">
        <constructor-arg index="0" name="name">
            <value>Rod</value>
        </constructor-arg>
        <constructor-arg index="1" name="content">
            <value>被人弄死我了</value>
        </constructor-arg>
    </bean>
</beans>

测试类:

public class Test {
    public static void main(String[] args) {
        ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
        IUser zhangGa = (IUser)context.getBean("zg");
        IUser rod = (IUser)context.getBean("rd");
        zhangGa.shuoHua();
        rod.shuoHua();
    }
}



java SSM第三章学习内容(Spring核心(IOC,AOP))

二.AOP   增强切面编程

案例思路:在方法执行期间进行切面编程(插入相应的方法)



java SSM第三章学习内容(Spring核心(IOC,AOP))

aop包里面的类:

public class Hou {
    public void after(JoinPoint jp,Object result){
        System.out.println("注册后要充值");
    }
}

public class Huanrao {
    public Object afterhr(ProceedingJoinPoint jp)throws Throwable{
        System.out.println("环绕增强前");
        Object o = jp.proceed();
        System.out.println("环绕增强后");
        return o;
    }
}

public class Qian {
    public void before(JoinPoint jp){
        System.out.println("注册前免费送装备");
    }
}

public class Yichang {
    public void afterThrowing(JoinPoint jp,Exception e){
        System.out.println("异常维护送你充值礼包");
    }
}

public class Zuizhong {
    public void afterzz(JoinPoint jp){
        System.out.println("最终添加完毕");
    }
}

dao接口:

public interface UserDao {
    public void save(User user);
}
 

dao.impl:
@Repository("userDao")
public class UserDaoImpl implements UserDao {

    public void save(User user) {
        System.out.println("保存到数据");
        throw new RuntimeException("出错了");
    }
}
 

实体类:
public class User implements java.io.Serializable {
    private Integer id; 
    private String username;
    private String password;
    private String email; 
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

serivce接口:
public interface UserService {
    public void addNewUser(User user);
}

service.impl:
@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    @Qualifier("userDao")
    
    private UserDao dao;
    
    /*public void setDao(UserDao dao) {
        this.dao = dao;
    }*/

    public void addNewUser(User user) {
        
        dao.save(user);
    }
}

applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"
    >
    
    <bean id="zz" class="aop.Zuizhong"></bean>
    <bean id="hr" class="aop.Huanrao"></bean>
    <bean id="qz" class="aop.Qian"></bean>
    <bean id="hz" class="aop.Hou"></bean>
    <bean id="yc" class="aop.Yichang"></bean>
    <!-- aop结构 -->
    <aop:config>
    <!-- 切入点 -->
    <aop:pointcut expression="execution(public void save(..))"  id="qmpoinyout"/>
    <!-- 环绕增强 -->
    <aop:aspect ref="hr">
        <aop:around method="afterhr" pointcut-ref="qmpoinyout"/>
    </aop:aspect>
    <!-- 最终增强 -->
    <aop:aspect ref="zz">
        <aop:after method="afterzz" pointcut-ref="qmpoinyout"/>
    </aop:aspect>
    <!-- 前增强 -->
    <aop:aspect ref="qz">
        <aop:before method="before" pointcut-ref="qmpoinyout"/>
    </aop:aspect>
    <!-- 后增强 -->
    <aop:aspect ref="hz">
        <aop:after-returning method="after" pointcut-ref="qmpoinyout" returning="result"/>
    </aop:aspect>
    <!-- 异常 -->
    <aop:aspect ref="yc">
        <aop:after-throwing method="afterThrowing" pointcut-ref="qmpoinyout" throwing="e"/>
    </aop:aspect>
    </aop:config>
    
    <!-- 扫描包中注解标注的类 -->
    <context:component-scan base-package="service,dao.impl" />
</beans>


测试类:
public class Test {
    public static void main(String[] args) {    
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService service = (UserService) ctx.getBean("userService");
        User user = new User();
        user.setId(1);
        user.setUsername("test");
        user.setPassword("123456");
        user.setEmail("[email protected]");
        service.addNewUser(user);
    }
}


注:异常注释掉了,如果异常存在不会出现环绕增强后
java SSM第三章学习内容(Spring核心(IOC,AOP))