V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bushiren
V2EX  ›  Java

Autowired 注入后怎么运行构造方法

  •  
  •   bushiren · 2020-07-09 08:38:02 +08:00 · 3577 次点击
    这是一个创建于 1596 天前的主题,其中的信息可能已经有所发展或是发生改变。

    `@Autowired private Test_bbs test;

    @RequestMapping("/test")
    public void test( ) {
       怎么运行 Test_bbs 的构造方法啊;
    }`
    

    @Service public class Test_bbs{ public Test_bbs(){ System.out.println("运行到我了 "); } }

    16 条回复    2020-07-10 11:14:21 +08:00
    qping
        1
    qping  
       2020-07-09 08:58:52 +08:00
    构造方法 new 的时候会调用,spring 启动时候会先构建 Test_bbs 对象
    bushiren
        2
    bushiren  
    OP
       2020-07-09 09:06:24 +08:00
    @qping 注入的 没 new 该怎么传参啥的呢
    optional
        3
    optional  
       2020-07-09 09:07:53 +08:00
    可以用 @PostConstruct
    不过不推荐 @Autowire,推荐构造函数注入。
    bushiren
        4
    bushiren  
    OP
       2020-07-09 09:11:38 +08:00
    @optional 大佬可以码个例子吗,新手多多指教
    qping
        5
    qping  
       2020-07-09 09:16:24 +08:00
    如果参数是在配置文件中,使用 @Value 注入
    如果参数在其他类中,使用 @Autowire 把其他类注入进来
    如果参数在数据库或者其他地方需要读取,可以像楼上说的用 @PostConstruct
    cxshun
        6
    cxshun  
       2020-07-09 09:18:09 +08:00
    默认情况下,`spring`是使用无参构造函数初始化类的。如果你希望调用有参的构造函数,那么就类似`@optional`兄弟说的在构造函数上面加`@PostConstruct`,这个在网上找找就可以了。
    ixx
        7
    ixx  
       2020-07-09 11:37:09 +08:00   ❤️ 1
    ```java
    @Service
    public class Test_bbs{
    @PostConstruct
    public Test_bbs(){
    System.out.println("运行到我了 ");
    }
    }
    ```
    这样就可以初始化了
    bushiren
        8
    bushiren  
    OP
       2020-07-09 11:43:26 +08:00
    @qping 谢谢层主,了解了,
    @cxshun 谢谢,大佬解答
    @ixx 谢谢层主,这样。外部另一个类是要怎么调用的和传参呀,
    ixx
        9
    ixx  
       2020-07-09 14:49:53 +08:00
    @bushiren #8 你想往构造方法里传参?
    cxshun
        10
    cxshun  
       2020-07-09 14:53:18 +08:00
    @ixx #9
    @bushiren #8 我猜这位兄弟的意思应该是要注入另外一个类到构造函数吧?不知道理解对不对哈。
    如果是这样,那就直接在构造函数上面用 @Autowired 就好了。
    如果不是,那可能就要考虑一下是啥情况了哈
    bushiren
        11
    bushiren  
    OP
       2020-07-09 14:59:42 +08:00
    @ixx 呃。难道不行吗。我这想法 不奇葩吧,
    bushiren
        12
    bushiren  
    OP
       2020-07-09 15:00:41 +08:00
    @cxshun 我就是想 直接和 new 一样 使用构造函数,并可以传参,


    通过注入的方式罢了
    ixx
        13
    ixx  
       2020-07-09 15:30:38 +08:00
    @bushiren #11
    spring 管理的 bean 一般在容器初始化的时候就生成实例了 你注入的时候已经有实例了 如果你想在他实例化的时候指定值 哪直接在写死就行 或者放配置文件里读取
    limuyan44
        14
    limuyan44  
       2020-07-09 15:49:01 +08:00
    学习 spring 还是建议从基础开始学起,不然以后坑的是自己。
    heyjim75111
        15
    heyjim75111  
       2020-07-10 09:02:48 +08:00
    对我来说, 要么参数是在配置文件中,使用 @Value 注入, 要么 另外加 set 接口设进去
    fivesmallq
        16
    fivesmallq  
       2020-07-10 11:14:21 +08:00
    使用 ApplicationContext 的方法获取 bean,context.getBean(clazz,args); SpringContextHolder.getBean(XXX.class, arg1, arg2);
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   983 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:19 · PVG 05:19 · LAX 13:19 · JFK 16:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.