0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机,
hosts文件中默认有:
# 127.0.0.1 localhost
# 0:0:0:0:0:0:0:1 localhost
只需要把# 0:0:0:0:0:0:0:1 localhost 注释或者删除就行
因为没有传参
老是第一讲就说了啊:
https://gitee.com/liaoshixiong/girl.git
有2个分支,你选你要的就是了
有啊,在问答里面搜搜就看到了
有可能出现的问题:
1:execution表达式写错了。
2:配置文件或配置类中忘记添加<aop:aspectj-autoproxy/>。
3:如果切入点没有实现接口需要使用cglib动态代理,<aop:aspectj-autoproxy proxy-target-class="true"/>。
4:<context:component-scan 配置的问题导致无法动态代理,具体请参考官方文档。
一般情况下主配置文件要排除@Controller注解,webmvc配置里应该只包含@Controller注解。
如果我们要切入Controller,我们需要在webmvc配置里面加入<aop:aspectj-autoproxy proxy-target-class="true"/>。
如果我们要切入其他如Service,我们需要在主配置里面加入<aop:aspectj-autoproxy proxy-target-class="true"/>。
如果我们既要切入Controller又要切入Service,两个配置都需要加入<aop:aspectj-autoproxy proxy-target-class="true"/>。这个问题比较奇怪,目前还不知道解决方法。
没啥 就是定义了一个切点
那个被举报的2小时学springboot里面有,这个是后面的
@autowired一般不用做于局部变量,通常都是放在方法之前作为一个全局变量来进行使用的,如果放入到方法之中你会发现提示使用不当的意思,new 一个对象虽然说后期维护比较麻烦,牵一发而动全身,但是如果是单单在一个方法一次使用的话,效果是都一样的,但是毕竟局部变量不会像全局变量那样一直占用着内存,能够算是优化吧(个人理解,欢迎指教)
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> 类之前加@Data注解即可
自己解决了,打错了
我也没有这个方法
你girlList方法和girlAdd方法的value值一样,也就是,映射路径一样,请求时不知道调用哪个方法,去掉其中一个注解就可以了,或者更改其中一个的value值
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency>
返回是一个数组,循环可以得到全部参数;好像默认为方法注解参数的第一个
你输入localhost:8080就是这个值,但是你用127.0.0.1访问就是127.0.0.1,或者你使用别人的机器访问你的程序,这个ip应该就会是别人的ip
https://www.imooc.com/qadetail/303562
希望可以帮到你,我也卡了很久了,后面发现是版本不匹配的原因
打开浏览器开发者工具(F12),查看一下network是否有发送http请求,然后可以在项目中打个断点调试一下,分析一下是什么原因
https://stackoverflow.com/questions/42182426/spring-boot-repository-field-required-a-bean-named-entitymanagerfactory-that直接看这个解答吧,解决了
形参名?
import org.aspectj.lang.JoinPoint;
找个地儿copy一份,等到要用的时候就copy回来
贴出控制台的异常信息,定位一下
@AfterReturning增强处理将在目标方法正常完成后被织入。@AfterThrowing增强处理主要用于处理程序中未处理的异常。
可能是跳过了,利用validate 可以补充必填字段验证
每次去找资料
发现是Object传入的类型出错了,因为是IDEA自动导入的,导入的是com.org.omg.CORBA下的Object,改为java.lang下的Object就正常了。
写了的
Spring对AOP的实现提供了很好的支持。下面我们就使用Spring的注解来完成AOP做一个例子。
首先,为了使用Spring的AOP注解功能,必须导入如下几个包。aspectjrt.jar,aspectjweaver.jar,cglib-nodep.jar.
然后我们写一个接口
[java] view plain copy print?
package com.bird.service;
public interface PersonServer {
public void save(String name);
public void update(String name, Integer id);
public String getPersonName(Integer id);
}
和一个接口实现类
[java] view plain copy print?
package com.bird.service.impl;
import com.bird.service.PersonServer;
public class PersonServiceBean implements PersonServer{
@Override
public void save(String name) {
System.out.println("我是save方法");
// throw new RuntimeException();
}
@Override
public void update(String name, Integer id) {
System.out.println("我是update()方法");
}
@Override
public String getPersonName(Integer id) {
System.out.println("我是getPersonName()方法");
return "xxx";
}
}
下面使用Spring注解方式对这个Bean进行方法拦截
[java] view plain copy print?
package com.bird.service;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
/**
* 切面
* @author Bird
*
*/
@Aspect
public class MyInterceptor {
@Pointcut("execution(* com.bird.service.impl.PersonServiceBean.*(..))")
private void anyMethod(){}//定义一个切入点
@Before("anyMethod() && args(name)")
public void doAccessCheck(String name){
System.out.println(name);
System.out.println("前置通知");
}
@AfterReturning("anyMethod()")
public void doAfter(){
System.out.println("后置通知");
}
@After("anyMethod()")
public void after(){
System.out.println("最终通知");
}
@AfterThrowing("anyMethod()")
public void doAfterThrow(){
System.out.println("例外通知");
}
@Around("anyMethod()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("进入环绕通知");
Object object = pjp.proceed();//执行该方法
System.out.println("退出方法");
return object;
}
}
[java] view plain copy print?
@Pointcut("execution(* com.bird.service.impl.PersonServiceBean.*(..))")
这句话是方法切入点,execution为执行的意思,*代表任意返回值,然后是包名,.*意思是包下面的所有子包。(..)代
表各种方法.
然后下面的注解就比较简单了,就是在使用方法前和中,还有环绕拦截/
然后在Spring的配置文件中继续配置Bean,需要打开AOP命名空间
[java] view plain copy print?
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<aop:aspectj-autoproxy/>
<bean id="personServiceBean" class="com.bird.service.impl.PersonServiceBean"/>
<bean id="myInterceptor" class="com.bird.service.MyInterceptor"/>
</beans>
然后建立一个Junit测试
[java] view plain copy print?
package junit.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.bird.service.PersonServer;
public class SpringAOPTest {
@Test
public void inteceptorTest(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beanAop.xml");
PersonServer bean = (PersonServer)ctx.getBean("personServiceBean");
bean.save(null);
}
}
测试结果为
[java] view plain copy print?
2012-3-12 18:08:39 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6: display name [org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6]; startup date [Mon Mar 12 18:08:39 CST 2012]; root of context hierarchy
2012-3-12 18:08:40 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beanAop.xml]
2012-3-12 18:08:40 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6]: org.springframework.beans.factory.support.DefaultListableBeanFactory@b0bad7
2012-3-12 18:08:40 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@b0bad7: defining beans [org.springframework.aop.config.internalAutoProxyCreator,personServiceBean,myInterceptor]; root of factory hierarchy
null
前置通知
进入环绕通知
我是save方法
后置通知
退出方法
最终通知